Stream.of("one", "two", "three", "four").peek(e -> System.out.println(e));這樣不會有任何的輸出;Stream.of("one", "two", "three", "four").peek(e -> System.out.println(e)).collect(Collectors.toList());這樣輸出:onetwothreefourStream.of("one", "two", "three", "four") .peek(e -> System.out.println("Peeked value: " + e)) .map(String::toUpperCase) .peek(e -> System.out.println("Mapped value: " + e)) .collect(Collectors.toList());這樣輸出:Peeked value: oneMapped value: ONEPeeked value: twoMapped value: TWOPeeked value: threeMapped value: THREEPeeked value: fourMapped value: FOUR知道 peek() 方法接受一個實現了 consumer 接口的類,但是實在是搞不清楚到底它是如何運行的。
5 回答

慕村225694
TA貢獻1880條經驗 獲得超4個贊

富國滬深
TA貢獻1790條經驗 獲得超9個贊
java8流中所有的操作都是蓄而不發的,只有執行foreach,collect等終結操作時,流的操作才會執行。
而且流內部會自動進行優化,只要得到想要的解決就不會繼續進行計算了。
peek是個中間操作,它提供了一種對流中所有元素操作的方法,而不會把這個流消費掉(foreach會把流消費掉),然后你可以繼續對流進行其他操作。

慕哥9229398
TA貢獻1877條經驗 獲得超6個贊
stream 分 中間操作 和 終端操作, (foreach, collect count)屬于終端操作;
peek: 生成一個包含原Stream的所有元素的新Stream,同時會提供一個消費函數(Consumer實例),新Stream每個元素被消費的時候都會執行給定的消費函數;
添加回答
舉報
0/150
提交
取消