我有以下代碼: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