如何检查列表是否具有连续日期。假设我有如下列表
List<Date> dates = new ArrayList<>();
dates.add(java.sql.Date.valueOf(LocalDate.of(2016, 11, 12)));
dates.add(java.sql.Date.valueOf(LocalDate.of(2016, 12, 15)));
dates.add(java.sql.Date.valueOf(LocalDate.of(2016, 11, 13)));
我尝试将前一个日期保存在临时变量中,但这不起作用
最佳答案
如果您真的只是想知道您的列表是否包含任何连续日期并且您确实想使用流,那么这可能是一个解决方案:
List<Date> dates = new ArrayList<>();
dates.add(java.sql.Date.valueOf(LocalDate.of(2016, 11, 12)));
dates.add(java.sql.Date.valueOf(LocalDate.of(2016, 12, 15)));
dates.add(java.sql.Date.valueOf(LocalDate.of(2016, 11, 13)));
boolean hasConsecutiveDates
= dates.stream()
.sorted()
.anyMatch(new Predicate<java.sql.Date>() {
private java.sql.Date previous;
@Override
public boolean test(java.sql.Date date) {
boolean consecutiveByDay = false;
if (previous != null) {
consecutiveByDay =
ChronoUnit.DAYS.between(previous.toLocalDate(), date.toLocalDate()) == 1;
}
previous = date;
return consecutiveByDay;
}
});
请注意,流实际上并不是为了保持状态并了解流中的其他元素而设计的。这就是为什么我们需要显示的谓词来跟踪前一个元素。
关于java - 使用java流检查两个日期是否连续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41039350/