1. 程式人生 > 實用技巧 >JDK8新特性,Stream,Lambda表示式

JDK8新特性,Stream,Lambda表示式

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

特性

  1. 不是陣列結構,沒有內部儲存
  2. 不支援索引訪問
  3. 延遲計算
  4. 支援並行
  5. 很容易生成陣列或集合(List,Set)
  6. 支援過濾、查詢、轉換、彙總、聚合等操作

中間操作

  • 過濾filter
  • 去重distinct
  • 排序sorted
  • 擷取limit前多少個、skip跳過前多少個
  • 轉換map/flatMap
  • 其他peek

終止操作

  • 迴圈forEach
  • 計算main、max、count、average
  • 匹配anyMatch、allMatch、noneMatch、findFirst、finAny
  • 匯聚reduce
  • 收集器toArray collect

Stream的建立

  1. 通過陣列
  2. 通過集合
  3. 通過Stream.generate方法來建立
  4. 通過Stream.iterate方法來建立
  5. 其他API建立

parallel並行流

設定並行執行的執行緒數

System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism","執行緒數量");

sequential順序流