下面的代码会筛选元素,直到找到 3 个通过筛选方法的元素,还是筛选所有元素?manyItems.stream()
.filter(it -> it.getValue > 100)
.limit(3)
...
2 回答
慕桂英546537
TA贡献1848条经验 获得超10个赞
filter()
具有惰性执行。这意味着当你调用它时,它实际上并没有做任何正确的事情。相反,它只是返回一个新的,它将包含遍历时与给定元素匹配的元素。Stream
Predicate
由于是短路状态的中间操作,因此它将处理直到它达到极限和短路。这意味着当您调用 时,它将在遍历时返回仅包含元素的新 Stream。由于只有遍历足以达到给定的大小,因此实际上只会过滤掉所需数量的元素。limit()
Stream
filter
limit
filter
我们可以通过调用来测试这一点:peek()
Arrays.stream(new int[] {1, 2, 2, 2, 2}) .filter(e-> e > 1) .peek(System.out::println) .limit(3) .average();
(其中可以是任何本身不会短路的终端操作)average()
哪些输出:
2 2 2
(请注意,调用后最后两个不会出现filter()
)
添加回答
举报
0/150
提交
取消