Java8中有兩大最為重要的改變。第一個是 Lambda 表達式 ;另外一個則是 Stream API。
Stream API ( java.util.stream) 把真正的函數式編程風格引入到Java中。這是目前為止對Java類庫最好的補充,因為Stream API可以極大提供Java程序員的生產力,讓程序員寫出高效率、乾淨、簡潔的代碼。
Stream 是 Java8 中處理集合的關鍵抽象概念,它可以指定你希望對集合進行的操作,可以執行非常複雜的查找、過濾和映射數據等操作。 使用Stream API 對集合數據進行操作,就類似於使用 SQL 執行的數據庫查詢。也可以使用 Stream API 來並行執行操作。簡言之,Stream API 提供了一種高效且易於使用的處理數據的方式。
Stream到底是什麼呢?
是數據渠道,用於操作數據源(集合、數組等)所生成的元素序列。“集合講的是數據,Stream流講的是計算!”
注意:
①Stream 自己不會存儲元素。
②Stream 不會改變源對象。相反,他們會返回一個持有結果的新Stream。
③Stream 操作是延遲執行的。這意味著他們會等到需要結果的時候才執行。
Stream 的操作三個步驟
l1- 創建 Stream
一個數據源(如:集合、數組),獲取一個流
l2- 中間操作
一箇中間操作鏈,對數據源的數據進行處理
l3- 終止操作(終端操作)
一旦執行終止操作,就執行中間操作鏈,併產生結果
創建 Stream方式一:通過集合
Java8 中的 Collection 接口被擴展,提供了兩個獲取流的方法:
ldefault Stream
ldefault Stream
創建 Stream方式二:通過
Java8 中的 Arrays 的靜態方法 stream() 可以獲取數組流:
lstatic
重載形式,能夠處理對應基本類型的數組:
lpublic static IntStream stream(int[] array)
lpublic static LongStream stream(long[] array)
public static DoubleStream stream(double[] array)
創建 Stream方式三:通過Stream的of()
可以調用Stream類靜態方法 of(), 通過顯示值創建一個流。它可以接收任意數量的參數。
lpublic static
創建 Stream方式四:創建無限流
可以使用靜態方法 Stream.iterate() 和 Stream.generate(), 創建無限流。
l迭代
public static
l生成
public static
Stream 的中間操作
多個中間操作可以連接起來形成一個
流水線,除非流水線上觸發終止操作,否則中間操作不會執行任何的處理!而在終止操作時一次性全部處理,稱為“惰性求值”。1-篩選與切片
2-映 射
3-排序
Stream 的終止操作
•終端操作會從流的流水線生成結果。其結果可以是任何不是流的值,例如:List、Integer,甚至是 void 。
•流進行了終止操作後,不能再次使用。
1-匹配與查找
2-歸約
備註:map 和 reduce 的連接通常稱為 map-reduce 模式,因 Google 用它來進行網絡搜索而出名。
3-收集
Collector 接口中方法的實現決定了如何對流執行收集的操作(如收集到 List、Set、Map)。
另外, Collectors 實用類提供了很多靜態方法,可以方便地創建常見收集器實例,具體方法與實例如下表:
以上就是一個簡單的總結,沒有討論他的原理和一些講解,後期再來就可以,感謝您的關注。我們下期再見。
閱讀更多 LOVER 的文章