亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 8 peek() 方法的一些疑惑

Java 8 peek() 方法的一些疑惑

江戶川亂折騰 2019-03-11 17:19:39
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 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

簡單地說就是懶咯 你沒有對流進行任何操作peek就不會執行

就是一個元素執行完所有操作之后再對下一個元素進行處理



查看完整回答
反對 回復 2019-04-17
?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

peek不是終結操作,其返回值還是Stream,你這種情況應該用forEach


查看完整回答
反對 回復 2019-04-17
?
慕村225694

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

處理流的方法分為惰性求值和及早求值(這兩個概念不在此展開了),對流的處理通常包括一系列惰性求知加上一個及早求值;流遇到及早求值的時候,才會真正去遍歷和執行


查看完整回答
反對 回復 2019-04-17
?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

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

查看完整回答
反對 回復 2019-04-17
?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

stream 分 中間操作 和 終端操作, (foreach, collect count)屬于終端操作;

peek: 生成一個包含原Stream的所有元素的新Stream,同時會提供一個消費函數(Consumer實例),新Stream每個元素被消費的時候都會執行給定的消費函數;


查看完整回答
反對 回復 2019-04-17
  • 5 回答
  • 0 關注
  • 565 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號