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

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

如果只有一個 BinaryOperator 參數被用自身來總結,那么 Java 流實際上會減少什么?

如果只有一個 BinaryOperator 參數被用自身來總結,那么 Java 流實際上會減少什么?

Helenr 2022-08-03 10:29:38
看看下面的代碼:在二元運算符中,我們有remined((x,y)->x+x)。為什么它實際上被計算為可選[512]?我沒有解釋。System.out.println((Stream.generate(()->1d).limit(10).            peek((doubleValue)->{                System.out.println("Call the first peek: "+doubleValue);            }).            reduce((x,y)->x+x)));這是輸出:只是為了向你澄清,我在偷看部分中顯示單個x是1.0。Call the first peek: 1.0Call the first peek: 1.0Call the first peek: 1.0Call the first peek: 1.0Call the first peek: 1.0Call the first peek: 1.0Call the first peek: 1.0Call the first peek: 1.0Call the first peek: 1.0Call the first peek: 1.0Optional[512.0]那么問題來了,在獲得Optimal[512]之前,什么控制著減少到工作?爪哇島java-stream
查看完整描述

3 回答

?
郎朗坤

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

因為您有 10 個參數,但操作是 9。2^9 = 512


查看完整回答
反對 回復 2022-08-03
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

從技術上講,當您這樣做時,Stream reduce不會提供任何一致的事情。

保證僅通過關聯約化操作提供,而您的保證則不然(它考慮了第一個操作數,忽略了第二個操作數。

測試代碼時,會觀察結果。

當試圖對如何在非并行流中實現減少進行有根據的猜測時,這些結果并不令人驚訝。但是,Stream的文檔無法保證這些結果,因為您沒有遵守要求。

例如,結果可能是 1 或 2。雖然有點令人費解,但它仍然有意義,你是那個不符合要求的人。


查看完整回答
反對 回復 2022-08-03
?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

讓我們看看這里發生了什么:


    System.out.println((Stream.generate(()->1d).limit(10).

            reduce((x,y)-> {

                double ret = x+x;

                System.out.println(ret);

                return ret;

            })));

輸出為


2.0

4.0

8.0

16.0

32.0

64.0

128.0

256.0

512.0

Optional[512.0]

因為您的流中有 10 個參數提供給具有默認起始值的 reduce。0


由于您正在使用并且您實際上將結果加倍9倍,例如在第一個之后,@ZhenyaM提到:(x, y) -> x+xresult <- result + resultresult <- 0 + 12^9 = 512


查看完整回答
反對 回復 2022-08-03
  • 3 回答
  • 0 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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