java - 从列表中获取第一个后续 DayOfWeek
问题描述
对于日程安排应用程序,我需要从列表中确定今天之后的第一天,然后继续。例如:
DayOfWeek today -> SATURDAY
val list1 = listOf(MONDAY, TUESDAY, FRIDAY)
DayOfWeek today -> WEDNESDAY
val list2 = listOf(TUESDAY)
然后逻辑必须给我 MONDAY 用于 list1 和 TUESDAY 用于 list2。我知道.plusDays()
DayOfWeek 枚举类上的函数,TemporalAdjusters.nextOrSame()
但是你必须提供一个 DayOfWeek,我不知道,因为我试图在列表中找到它。
解决方案
LocalDate today = LocalDate.now(ZoneId.systemDefault());
List<DayOfWeek> list = List.of(DayOfWeek.MONDAY, DayOfWeek.TUESDAY, DayOfWeek.FRIDAY);
DayOfWeek first = Collections.min(list,
Comparator.comparing(dow -> today.with(TemporalAdjusters.nextOrSame(dow))));
System.out.println(first);
今天运行时的输出(我所在时区的星期六):
周一
我正在使用比较器来查询最小值,该比较器比较一周中下一次出现的日期(如果今天恰好是那一天)。由于星期一先到,这被认为是最低限度。我间接调用了TemporalAdjusters.nextOrSame()
您在列表的每个成员中提到的方法。这可能不是最省时的方法,但对于 20 个目的中的 19 个,我确信它没问题。它提供了简短且我认为可读的代码,这更重要。
如果今天是星期三?让我们尝试设置today
为下周三:
LocalDate today = LocalDate.of(2021, Month.JUNE, 23);
现在输出是:
星期五
推荐阅读
- vhdl - 在 VHDL 中,如果信号不是时钟,我可以使用 signal'event 吗?
- c - 带 malloc 的二维数组
- ios - 通知不会在 ios 12 上触发
- three.js - Three.js 在新页面加载时销毁
- javascript - 错误 ts2315 类型“可观察”不是通用的
- angular - @angular-devkit/build-ng-packagr:build 是否有任何可配置的选项?
- c++ - 如何在 C++ 中生成 4 个不同的随机数
- excel - 源到目标步骤
- php - 用 vue 函数编写的消息未显示在浏览器上
- android - 展开模式下的 SearchView 不会隐藏从 Marshmallow 开始的所有操作栏图标