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),进行操作,那么为什么输出的结果不像我解释的那样呢?