Stream vs Collection

java8中引用lambda,lambda中有一個很是重要的特性就是stream,在遍歷數組或集合的時候,都是用到stream,那麼 Stream 和之前常到的Collection到底有什麼區別呢?java

Streams 可能看起來和集合很相近,可是他們確實是不一樣的兩個概念。當你在處理大的數據集的時候,你可能不會用一個集合來處理整個數據集。這兒有一個很好的比喻來對比Collection和Stream。假設一部電影存儲在DVD 和 網絡流媒體上。一部電影能夠被看做一個數據集。由於DVD存儲着整個電影,因此它能夠被看做一個Collection。當你在網上看電影的時候,電影按字節流傳輸給你進行觀看。這個流媒體只須要在你觀看的地方提早緩衝幾個字節。經過這種方式,播放器可以在大量字節還沒加載進來時,就能夠從電影的開始進行播放。數組

下面總結四項Stream和Collection的區別網絡

  1. 一個Stream給一個明確元素類型的序列集合提供一個接口,而後和集合不同,Stream實際在並無存儲這些元素,只在須要的時候纔會被計算,所以Stream 能夠被看做一個懶加載Collection。接口

  2. Stream 的操做不會改變它原先的資源,反而它會返回一個新的Stream去存儲結果生命週期

  3. 多是無屆的。Collection的容量是有限的,可是Stream沒有。相似limit(n)和findFirst()這樣的短路操做能夠容許在無限的流在有限的時間內來完成計算資源

  4. 可消耗的。在stream的生命週期,Stream的元素只會被訪問一次。若是你想在一個流裏同時訪問同一個元素,你須要基於現有的資源上從新生成一個新的Stream.it

以上就是對Stream的總結。。。io

相關文章
相關標籤/搜索