回覆列表
  • 1 # 機器貓的口袋哇

    lambda中有並行流,可以多執行緒處理。不過單純的100萬條資料純遍歷,for還是會快一些的,資料量小的時候,多執行緒不一定比單執行緒快,不過當資料量很大,大幾千萬甚至上億的時候,並行流或許會快一些

  • 2 # 想取個名咋就不過呢

    根據 Alex Zhitnitsky 的測試結果顯示:堅持使用傳統的 Java 程式設計風格——iterator 和 for-each 迴圈——比 Java 8 的實現效能更佳。

    使用迭代器或 for-each 迴圈是遍歷 ArrayList 最有效的方式,效能比採用索引值的傳統 for 迴圈方式好兩倍。

    在 Java 8 的方法中,並行流的效能最佳。但是請小心,在某些情況下它也可能會導致程式執行得更慢。Lambda 表示式的速度介於流與並行流之間。

  • 3 # 三袋大菠蘿

    lambda事實上還是在一個執行緒內執行,那麼具體怎麼實現的呢?

    把執行緒看作一個任務池,每次建立一個任務,其實就是往任務池中插入一個任務。程式繼續往下走,直到當前所有程式碼執行完畢之後,再從執行緒獲取下一個任務執行。

    lambda就是玩了這個小把戲,讓人感覺是非同步,事實上是任務碎片化的操作。

    迴圈和lambda效能上差別就要看任務排程速度了,但我覺得,大多數情況下,還是for迴圈效率更高。

    lambda的好處主要是不容易阻塞而已。

  • 4 # 喲名字只是副產品

    lambda和stream是兩回事,問題應該是stream和for迴圈對比。正常序列stream與for對比,stream會慢到1.4-1.5倍;並行流迴圈會比較快只適合大量資料計算否則執行緒開銷及同步操作會有效能損耗,執行速度大概是0.6-0.8倍for迴圈

  • 5 # 採招圈

    很多人會提到並行流,並行流是用forkthread來實現的,每次幾個毫秒,如果數量很多,也會非常耗時,就不合算了。如果任務比較大,是合適的。我有一個輪詢,每次5萬個簡單的比較,比較很快不到1ms,用了並行流,需要幾秒鐘,改回for loop,一秒不到就好。巴適得板

  • 6 # 以夜色之名

    看使用場景,如果是純計算型,直接用for迴圈,如果有其他的io操作,考慮並行的stream,主要取決於運算和執行緒同步的開銷

  • 7 # qinzhang1

    很多情況下lambda會快,大部分編譯器會把lambda變成inline函式。如果for迴圈不在inline函數里,程式碼不會被cache,如果for迴圈在override的函式中,會更慢。所以,lambda是替代多型(虛指標)的好辦法。

  • 8 # 但求無Bug

    這個得看情況來分析。

    lambda表示式中有一種流叫parallelSteam,這叫並行流。相對stream流來講,對流的處理是並行處理,所以效率上肯定比單純的for迴圈。不過並行流有個缺陷,就是易產生併發安全問題。所以這玩意還是慎用。

    當然,stream流也有自己的優勢,假如你有多個處理操作,比如過濾某個集合中特定條件的元素後將其進行轉化後再遍歷輸出,此時涉及多個操作,如果用傳統的for迴圈來做,則不如stream效率高。因為它封裝了對集合進行操作的演算法和方法,是從底層進行處理。如果只是一個遍歷操作,兩者效率上差別不是很大。

    更關鍵的是,使用stream流可以使程式碼更簡潔,雖然對老程式設計師不是很友好,但是你只要花點時間研究研究,你就會喜歡上這種寫法。

  • 中秋節和大豐收的關聯?
  • 有沒有信用卡網貸,房貸車貸逾期的,將要逾期時,你們一般是怎麼處理的?