JDK8新特性,Stream,Lambda表示式
阿新 • • 發佈:2020-12-28
Lambda
常用的函式式介面方法
-
Supplier代表一個輸出
-
Consumer代表一個輸入
-
BiConsumer代表兩個輸入
-
Function代表一個輸入,一個輸出(一般輸入和輸出不同型別)
-
BiFunction代表兩個輸入,一個輸出(一般輸入和輸出不同型別)
-
UnaryOperator代表一個輸入,一個輸出(輸入和輸出是相同型別的)
-
BinaryOperator代表兩個輸入,一個輸出(輸入和輸出是相同型別的)
方法的引用分類
型別 | 語法 | 對應的lambda表示式 |
---|---|---|
靜態方法引用 | 類名::staticMethod | (args)->類名.staticMethod(args) |
例項方法引用 | inst::instMethod | (args)->inst.instMethod(args) |
物件方法引用 | 類名::instMethod | (inst,args)->類名.instMethod(args) |
構造方法引用 | 類名::new | (args)->new 類名(args) |
Stream
Stream是一組用來處理陣列、集合的API
特性
- 不是陣列結構,沒有內部儲存
- 不支援索引訪問
- 延遲計算
- 支援並行
- 很容易生成陣列或集合(List,Set)
- 支援過濾、查詢、轉換、彙總、聚合等操作
中間操作
- 過濾filter
- 去重distinct
- 排序sorted
- 擷取limit前多少個、skip跳過前多少個
- 轉換map/flatMap
- 其他peek
終止操作
- 迴圈forEach
- 計算main、max、count、average
- 匹配anyMatch、allMatch、noneMatch、findFirst、finAny
- 匯聚reduce
- 收集器toArray collect
Stream的建立
- 通過陣列
- 通過集合
- 通過Stream.generate方法來建立
- 通過Stream.iterate方法來建立
- 其他API建立
parallel並行流
設定並行執行的執行緒數
System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism","執行緒數量");