1. 程式人生 > >Java8 之stream

Java8 之stream

前言:

stream是我在重構同事程式碼的時候遇見的,所以就趕緊學習了一下。


總概述:

Java 8 中的 Stream 是對集合(Collection)物件功能的增強,它專注於對集合物件進行各種非常便利、高效的聚合操作(aggregate operation),或者大批量資料操作 (bulk data operation)。【這裡是掃描整個資料庫的訂單,所以資料量肯定是成千上萬的】 Stream API 藉助於同樣新出現的 Lambda 表示式,極大的提高程式設計效率和程式可讀性。同時它提供序列和並行兩種模式進行匯聚操作,併發模式能夠充分利用多核處理器的優勢,使用 fork/join 並行方式來拆分任務和加速處理過程。【採用併發處理確實很快!之前沒有併發打的日誌6000+ms,併發後差不多2000+ms】

總覽Stream:

之前學習C++的時候我們都有接觸過Iterator(迭代器)的概念,那麼這個Stream就像是個高階版的iterator。原始版本的 Iterator,使用者只能顯式地一個一個遍歷元素並對其執行某些操作;高階版本的 Stream,使用者只要給出需要對其包含的元素執行什麼操作,比如 “過濾掉長度大於 10 的字串”、“獲取每個字串的首字母”等,Stream 會隱式地在內部進行遍歷,做出相應的資料轉換。而且還能並行操作,而iterator只能是序列方式去遍歷。相同的是,他們都是單向的,不可往復的。資料只能遍歷一次,遍歷過之後就用盡了。

流的構成:

獲取一個數據源(source)→ 資料轉換→執行操作獲取想要的結果,每次轉換原有 Stream 物件不改變,返回一個新的 Stream 物件(可以有多次轉換),這就允許對其操作可以像鏈條一樣排列,變成一個管道,如下圖所示。


流的使用詳解:

(1. )多種方式來生成Stream Source :

  1. Collection 和 陣列(目前的話這個用過) 
  2. 靜態工廠
  3. 自己構建
  • Collection.stream()
  • Collection.parallelStream()
  • Arrays.stream(T array)
  • Stream.of()

簡單說,對 Stream 的使用就是實現一個 filter-map-reduce 過程,產生一個最終結果。

----------------------------後面會加入一些我自己的使用的例子什麼的---------------------------