Java 使用Streams.zip方法对LocalDate对象同时使用两个流
我需要对作为输入提供给我的两个列表进行流式处理,我想比较两个列表中相同索引的元素,如果第一个列表的元素总是大于第二个列表的元素,则返回true。我可以使用循环解决问题,但从美学角度讲,并将代码可读性牢记在心,我希望使用java流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
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。是否有一种方法可以同时从两个列表中选择元素并进行比较?