我有以下代码:Java流意想不到的结果
Stream.of("Java", "Stream", "Test")
.peek(s -> System.out.print(s + " "))
.allMatch(s -> s.startsWith("J"));
为什么它打印我的Java流?
我有以下代码:Java流意想不到的结果
Stream.of("Java", "Stream", "Test")
.peek(s -> System.out.print(s + " "))
.allMatch(s -> s.startsWith("J"));
为什么它打印我的Java流?
allMatch
是短路作为大多数流操作是。由于allMatch
早期返回,这就是为什么peek
只打印前两个元素。
因为allMatch()
会检查数据流中的每个人元素是否为真。而由于第二个是错误的,它不需要进一步检查。
所以peek()
不会打印第3个元素。
Yeap,我明白它没有被执行每个元素,那是我的问题 - 为什么?所以你说它停止执行第二个元素,这就是为什么我只看到两个值? – asdasdsdf
是的。因为'allMatch()'的第二个元素是false,所以流终止。 –
另请参见[在Java流是真的只用于调试吗?](https://stackoverflow.com/a/33636377/2711488) – Holger
与流行的思维方式(和实际实施)相反,最好考虑流就好像最后一次操作是拉动元素,而不是流推动它们。 – Dariusz