java 按< DayOfWeek>本地化顺序列出

xzv2uavs  于 2023-03-11  发布在  Java
关注(0)|答案(2)|浏览(89)

我们有DayOfWeek枚举,以标准ISO 8601顺序定义一周中的几天。
我需要这些对象的List,其顺序与Locale相对应。
我们可以很容易地确定locale是一周中的第一天。

Locale locale = Locale.CANADA_FRENCH ;
DayOfWeek firstDayOfWeek =  WeekFields.of( locale ).getFirstDayOfWeek() ;

设置List

List< DayOfWeek > dows = new ArrayList<>( 7 ) ;  // Set initial capacity to 7, for the seven days of the week.
dows.add( firstDayOfWeek ) ;

要把一周中的其他六天加到这个列表中,最简单/最短/最优雅的方法是什么?

yzuktlbb

yzuktlbb1#

您可以使用DayOfWeekplus方法。
计算从星期日到星期一在周末前后滚动。
使用IntStream及其range方法(* 包含 * 开始,* 排除 * 结束)递增数字。

Locale locale = Locale.CANADA_FRENCH;
DayOfWeek firstDayOfWeek = WeekFields.of(locale).getFirstDayOfWeek();

List<DayOfWeek> dows = IntStream.range(0, 7)
        .mapToObj(firstDayOfWeek::plus)
        .collect(Collectors.toList());
ih99xse1

ih99xse12#

我在Kotlin的解决方案:

fun sortedDaysOfWeek(locale: Locale = Locale.getDefault()): List<DayOfWeek> {
     val firstDayOfWeek = WeekFields.of(locale).firstDayOfWeek

     return DayOfWeek.values().partition { it == firstDayOfWeek }
                              .let{ it.first + it.second }
}

相关问题