Java 流过滤器是否足够智能,可以忽略有序流中不必要的项目吗?
问题
假设我有以下内容:
List<Integer> orderedList = Stream.of(5, 4, 0, 2, 1).sorted().toList();
如果我应用如下过滤器
List<Integer> filteredList = orderedList.stream().filter(integer -> integer < 3).toList();
将filter
检查中的所有项目orderedList
,或者鉴于它是有序的,它将在达到第一个错误条件后停止过滤,即,integer >= 3
或者它总是检查所有项目?
如果它检查所有项目,那么在有序列表的情况下,是否有更智能的方法来过滤项目?
解答
在上述的场景中,由于返回一个包含所有与过滤器匹配的元素的列表,filter()
因此适用于流中的所有元素。
如果您想在特定条件为真/假时停止处理,可以使用takeWhile()
,Java 9
:
orderedList.stream().takeWhile(v -> v < 3).forEach(System.out::println);