[Java] Stream 的執行順序

Posted on
java stream

Java 8 之後,有一個很大的特點是新的 Stream API,這個 API 讓工程師很輕易、簡潔、並以好理解的方式處理資料轉換。但這篇文章主要要講的不是如何使用 Stream,而是 Stream 處理的順序到底是怎麼樣的呢?

先來看看程式碼吧!

這段程式碼作用是將 1..5 這樣的 array ,每個 element 經過兩個平方的 map ,最後再 collect 成一個 list。而為了要了解中間過程的執行順序,我們在中間插了兩段 peek 把值印出來。

若依照一般 for 迴圈的思考方式,我們很容易就以為這段 code的順序應該是:

  1. 把所有元素都從 i 變成 i x i
  2. 把結果印出來
  3. 再把所有元素從 i 變成 i x i
  4. 把結果印出來
  5. collect 成新的 list

執行的結果應該要如下:

但實際執行程式,其結果會是像下面這樣:

可以很清楚的看到,程式的順序其實是一個一個元素做完才會換下一個! 因此如果中間的操作和順序有關係時,務必要特別注意!