首页 > 解决方案 > 从列表中获取第一个后续 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,我不知道,因为我试图在列表中找到它。

标签: javadatetimekotlinjava-timedayofweek

解决方案


    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);

现在输出是:

星期五


推荐阅读