【发布时间】:2016-11-29 10:40:25
【问题描述】:
我正在执行以下程序:
Stream.of("d2", "a2", "b1", "b3", "c")
.filter(s -> {
System.out.println("filter: " + s);
return true;
})
.forEach(s -> System.out.println("forEach: " + s));
我得到的输出是:
filter: d2
forEach: d2
filter: a2
forEach: a2
filter: b1
forEach: b1
filter: b3
forEach: b3
filter: c
forEach: c
但是,我期待以下输出:
filter: d2
filter: a2
filter: b1
filter: b3
filter: c
forEach: d2
forEach: a2
forEach: b1
forEach: b3
forEach: c
意思是,首先filter 方法循环应该已经完全执行,然后forEach 方法循环应该已经开始。
是不是我做错了什么?
【问题讨论】:
-
你没有做错任何事,这是意料之中的。
-
此外,您的心智模型假设您需要在执行终端操作之前遍历管道的所有元素。例如,如果您需要找到满足您的谓词的第一个元素,那将是相当低效的。
标签: java java-8 java-stream