java - 使用java流检查两个日期是否连续

标签 java date java-8 java-stream

如何检查列表是否具有连续日期。假设我有如下列表

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/

相关文章:

C# 正则表达式拆分为 Java 模式拆分

javascript - moment.js 或日期验证中的 isSame() 函数

ios - DateFormatting结果为null

java - 如何将 TimerTask 与 lambda 一起使用?

Java 不释放带有 finalize() 覆盖的对象

java - 必需属性中的 boolean 表达式

java - 在 Akka HTTP 中保持 WebSocket 连接处于 Activity 状态的最佳方法?

c# - 如何计算目标日期的日期前4天

java - 在树结构上创建深度流

java - 从静态函数中的泛型获取类