Java 8 流操作执行顺序
2022-09-02 11:26:39
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
List<Integer> twoEvenSquares = numbers.stream().filter(n -> {
System.out.println("filtering " + n);
return n % 2 == 0;
}).map(n -> {
System.out.println("mapping " + n);
return n * n;
}).limit(2).collect(Collectors.toList());
for(Integer i : twoEvenSquares)
{
System.out.println(i);
}
当执行时,输出下面的逻辑来了
filtering 1
filtering 2
mapping 2
filtering 3
filtering 4
mapping 4
4
16
如果流遵循短路概念(我们使用限制流操作),则输出必须如下所示:
filtering 1
filtering 2
filtering 3
filtering 4
mapping 2
mapping 4
4
16
因为在滤波2之后,我们仍然需要再找到一个元素来分层极限(2),操作,那么为什么输出没有像我解释的那样出现?