Java 使用Streams.zip方法对LocalDate对象同时使用两个流

Java 使用Streams.zip方法对LocalDate对象同时使用两个流,java,java-8,java-stream,Java,Java 8,Java Stream,我需要对作为输入提供给我的两个列表进行流式处理,我想比较两个列表中相同索引的元素,如果第一个列表的元素总是大于第二个列表的元素,则返回true。我可以使用循环解决问题,但从美学角度讲,并将代码可读性牢记在心,我希望使用java流 static boolean validate(List<LocalDate> endDates, List<LocalDate> startDates) { //check for all elements if the elemen

我需要对作为输入提供给我的两个列表进行流式处理,我想比较两个列表中相同索引的元素,如果第一个列表的元素总是大于第二个列表的元素,则返回true。我可以使用循环解决问题,但从美学角度讲,并将代码可读性牢记在心,我希望使用java流

 static boolean validate(List<LocalDate> endDates, List<LocalDate> startDates) {
    //check for all elements if the element in first list is greater than elements in second list.
    //return false if above condition fails.
    Streams.zip(endDate, startDates, (endDate, startDate) -> {..})
}
静态布尔验证(列出结束日期、开始日期){
//如果第一个列表中的元素大于第二个列表中的元素,请检查所有元素。
//如果上述条件失败,则返回false。
Streams.zip(endDate,startDate,(endDate,startDate)->{..}
}

您可以使用
Stream.allMatch
对列表元素进行一对一比较:

static boolean validate(List<LocalDate> endDates, List<LocalDate> startDates) {
    return IntStream.range(0, endDates.size())
            .allMatch(i -> endDates.get(i).isAfter(startDates.get(i)));
}
静态布尔验证(列出结束日期、开始日期){
返回IntStream.range(0,endDates.size())
.allMatch(i->endDates.get(i).isAfter(startDates.get(i));
}

当然,这是假设两个列表的长度相同(如果
endDates
startDates
短,则您有一个bug;如果
startDates
短,则会在
startDates.get(i)
)上引发异常。

流API的当前实现(包括最新版本的Java 16)不提供这样的方法,您需要使用第三方库,例如和方法,或者使用来实现相同的结果。但是,您有责任避免索引溢出

最低限度的样本:

List<LocalDate> one = Arrays.asList(LocalDate.now(), LocalDate.now(), LocalDate.now());
List<LocalDate> two = Arrays.asList(LocalDate.MIN, LocalDate.MIN);

boolean allAfter = IntStream
        .range(0, Math.min(one.size(), two.size()))                 // limit the indices
        .allMatch(index -> one.get(index).isAfter(two.get(index))); // compare the dates
List one=Arrays.asList(LocalDate.now(),LocalDate.now(),LocalDate.now());
列表二=Arrays.asList(LocalDate.MIN,LocalDate.MIN);
布尔allAfter=IntStream
.range(0,Math.min(one.size(),two.size())//限制索引
.allMatch(index->one.get(index).isAfter(two.get(index));//比较日期

Hi Ankit Sharma,感谢您加入社区并迈出第一步。你能把这个表述成一个问题吗?目前,您似乎在声明将使用streams。我们能为您做些什么?那是什么
Streams
class?
java.util.stream
中的一个既没有方法
zip
,也不在包外可见。@ernest_k抱歉,我使用的是一个具有Streams util类的内部框架。是的,我说的是java.util.stream。是否有一种方法可以同时从两个列表中选择元素并进行比较?