优化这段代码 public Boolean checkDateListOrder() { List<Date> dates=Arrays.asList(commenceTime,finishTime,completionDataTime,acceptanceTime,settlementTime); List<Date> collect = dates.stream().filter(Objects::nonNull).collect(Collectors.toList()); for (int i = 0; i < collect.size() - 1; i++) { if (collect.get(i).getTime() > collect.get(i + 1).getTime()) { return false; } } int lastIndexOf = dates.lastIndexOf(null); int first = dates.indexOf(null); if (lastIndexOf == -1) { return true; } else if (lastIndexOf != dates.size() - 1) { return false; } else { for (int i = first; i <= lastIndexOf; i++) { if (dates.get(i) != null) { return false; } } } return true; }
时间: 2023-05-22 13:06:52 浏览: 100
这段代码可能存在一些潜在的问题和性能瓶颈。以下是一个可能的优化版本:
public Boolean checkDateListOrder() {
List<Date> dates = Arrays.asList(commenceTime, finishTime, completionDataTime, acceptanceTime, settlementTime);
// 过滤掉空值并排序
List<Date> sortedDates = dates.stream()
.filter(Objects::nonNull)
.sorted(Comparator.comparing(Date::getTime))
.collect(Collectors.toList());
// 检查排序后的日期列表是否与原列表一致
if (sortedDates.size() != dates.size() - dates.stream().filter(Objects::isNull).count()) {
return false;
}
for (int i = 0; i < sortedDates.size() - 1; i++) {
if (sortedDates.get(i).getTime() > sortedDates.get(i + 1).getTime()) {
return false;
}
}
return true;
}
这个版本使用了流式编程和函数式编程的思想,使用流的过滤和排序操作来消除空日期和排序日期,使得代码更为简洁和易读。它还使用了基于流的 null 元素计数方法来检查原始日期列表中的空值。
阅读全文