Java 如何从两个工作日之间获取工作日列表

Java 如何从两个工作日之间获取工作日列表,java,datetime,dayofweek,date,Java,Datetime,Dayofweek,Date,我想得到两个星期之间的星期几列表 比如说, Input1: DayOfWeek.MONDAY Input2: DayOfWeek.WEDNESDAY 并且输出应该是列表 [DayOfWeek.MONDAY, DayOfWeek.TUESDAY, DayOfWeek.WEDNESDAY] Java是否提供了任何Api来实现这一点 这是实现它的一种方法。也许有更好的办法。创建一个整数值流,其中开始日期为第一天,最后一天为最后一天+1。然后将DayOfWeek对象映射到day值 DayOfWe

我想得到两个星期之间的星期几列表

比如说,

Input1: DayOfWeek.MONDAY
Input2: DayOfWeek.WEDNESDAY

并且输出应该是列表

[DayOfWeek.MONDAY, DayOfWeek.TUESDAY,
DayOfWeek.WEDNESDAY]


Java是否提供了任何Api来实现这一点

这是实现它的一种方法。也许有更好的办法。创建一个整数值流,其中开始日期为第一天,最后一天为最后一天+1。然后将DayOfWeek对象映射到day值

DayOfWeek-monday=DayOfWeek.monday;
DayOfWeek周三=DayOfWeek.周三;
List days=IntStream.range(星期一.getValue(),星期三.getValue()+1)
.mapToObj(DayOfWeek::of)
.collect(Collectors.toList());
输出

[MONDAY, TUESDAY, WEDNESDAY]
您可以使用获取天数,然后使用
filter
筛选
周一
周三

List<DayOfWeek> days = Arrays.stream(DayOfWeek.values())
            .filter(day -> day.getValue() >= DayOfWeek.MONDAY.getValue()
                    && day.getValue() <= DayOfWeek.WEDNESDAY.getValue())
            .collect(Collectors.toList());

    System.out.println(days);
List days=Arrays.stream(DayOfWeek.values())
.filter(day->day.getValue()>=DayOfWeek.MONDAY.getValue()
太长了,读不下去了。
EnumSet.range
是为处理枚举对象而优化的实现

按照枚举对象定义的顺序创建枚举对象的子集。例如,根据标准,该顺序为星期一至星期日

范围是完全闭合的,这意味着开始和结束都包含在内

Set<DayOfWeek> set = EnumSet.range( DayOfWeek.MONDAY, DayOfWeek.WEDNESDAY );
跨越边界 其他答案都很好(我特别喜欢巴兹尔·波克的答案)。它们似乎都假设(1)你的两个输入日在同一周,以及(2)一周从星期一开始,就像枚举一样。现在如果输入是星期五和星期一,我们不想要星期五、星期六、星期天、星期一吗?如果美国的用户希望星期天和星期二产生星期天、星期一、星期二呢?星期天是一周的第一天(在其他一些地方也是如此)

我认为考虑到这些可能性,没有比经典循环更好的解决方案了

    DayOfWeek input1 = DayOfWeek.FRIDAY;
    DayOfWeek input2 = DayOfWeek.MONDAY;

    List<DayOfWeek> range = new ArrayList<>(7);
    DayOfWeek currentDow = input1;
    range.add(currentDow);
    while (! currentDow.equals(input2)) {
        currentDow = currentDow.plus(1);
        range.add(currentDow);
    }

    System.out.println(range);

这是一个很好的解决方案,值得一提的一点是,对DayOfWeek#值的引用创建了DayOfWeek枚举元素的另一个副本,以确保底层数组的不变性。
跨越周边界de>IntStream.rangeClosed()
所以不需要添加1?
List< DayOfWeek > dows = new ArrayList<>( set );
    DayOfWeek input1 = DayOfWeek.FRIDAY;
    DayOfWeek input2 = DayOfWeek.MONDAY;

    List<DayOfWeek> range = new ArrayList<>(7);
    DayOfWeek currentDow = input1;
    range.add(currentDow);
    while (! currentDow.equals(input2)) {
        currentDow = currentDow.plus(1);
        range.add(currentDow);
    }

    System.out.println(range);
    if (input1.getValue() > input2.getValue()) {
        throw new IllegalStateException("Inputs muct be in chronological order within the same Monday-based week");
    }