首先,不可否認,stream絕對是優雅的代名詞,無論是其串行調用方式,還是其api的強大能力,都給予了程序員一項特殊技能:高效、簡潔。

但事情并非絕對,但從性能上來說,stream真的比傳統迭代更優嗎?其實不然,還是要依據實際情況來看待問題。

在極少數量的迭代次數下,其實看不出性能效果的差異,固后面所說的幾點都是依賴大量數據迭代的前提之下。

Java8中用法優雅的Stream

具體分為以下幾點談談:

1、無論什么程序,都要跑在載體上,而常見的載體就是服務器,那么,提到這就很容易聯想到,CPU的處理能力,直接影響到性能問題。

如果只是單核cpu,那么還是推薦傳統迭代,a)實際測試效果來看,stream性能要明顯差于for循環之類的傳統處理方式,尤其在單核cpu時,千萬不要使用stream的并線處理,原因是并行處理時還有另外一項開銷,就是上下文線程切換,而此時只有單核cpu,你說這是不是“沒事找事”;

b)當cpu是多核時,并且隨著核數的增加,這時,stream的優勢才能逐漸顯示出來,畢竟并行處理還是由于串行的。

2、事情不是絕對,不是所有情況下,串行處理時stream都不如傳統迭代。比如在復雜對象的處理時(常見的有訂單對象,里面包含很多信息),經測試結果發現,stream性能還是由于普通迭代的,那更不用說,在多核cpu下的并行處理了,此處再次強調,不要在單核下使用串行,你會發現性能及其查!

3、最后提一點個人經歷,在使用并行stream時,要謹慎對待迭代處理中進行多外部接口調用,可能你會發現并行后因為上下文線程切換帶來的開銷反而不一定性能更優于串行,還會給系統穩定性帶來一定影響。

最后總結一下,處于代碼整潔上考慮,stream還是有明顯優勢的,但是在性能上,大家還是要依據實際情況來做出合理選擇,這樣才能寫出最“優雅”的代碼。