jdk1.8 lambda表示式入門

程式設計師XW發表於2018-10-09

隨著工作的推移,發現什麼東西都自己寫很辛苦,這時候就開始想著偷懶,網上找各種工具了,但是java中基本的判斷迴圈還是用的最常見的,今天偶然發現開源專案好多都用的lambda表示式,所以靜下心來研究一下。

lamdba表示式,()->{};   如果沒有引數可以在()不寫,有引數要寫,可以不用寫引數型別,如果該引數需要被final等修飾符修飾需要加上引數型別。

 

// 使用 lambda 表示式以及函式操作(functional operation)  
players.forEach((player) -> System.out.print(player + "; "));  
   
// 在 Java 8 中使用雙冒號操作符(double colon operator)  
players.forEach(System.out::println);  

lambda 常見介面:

Predicate介面

輸入一個引數,並返回一個 
Boolean值,其中內建許多用於邏輯判斷的預設方法

Predicate<String> predicate = (s) -> s.length() > 0;
boolean test = predicate.test("test");

判斷是否滿足上面的條件,滿足返回true,不滿足返回false

Predicate<Object> pre = Objects::nonNull;

判斷物件是否非空,非空返回true,否則返回false

Function介面

接收一個引數,返回單一的結果,預設的方法(andThen)可將多個函式串在一起,形成複合Funtion(有輸入,有輸出) 
結果,

Function<Integer, Integer> name = e -> e * 2;

Function<Integer, Integer> square = e -> e * e;

int value = name.andThen(square).apply(3);

compose 和 andThen 的不同之處是函式執行的順序不同。compose 函式先執行引數,然後執行呼叫者,而 andThen 先執行呼叫者,然後再執行引數。 所以說明andThen  先執行name後執行square

 

Supplier介面

返回一個給定型別的結果,與Function不同的是,Supplier不需要接受引數(供應者,有輸出無輸入)

Supplier<String> supplier = () -> "special type value";
String s = supplier.get();
System.out.println(s);

Consumer介面

代表了在單一的輸入引數上需要進行的操作。和Function不同的是,Consumer沒有返回值(消費者,有輸入,無輸出)

Consumer<Integer> add5 = (p) -> {
    System.out.println("old value:" + p);
    p = p + 5;
    System.out.println("new value:" + p);
};
add5.accept(10);

Stream的使用過程有著固定的模式:

  1. 建立Stream
  2. 通過中間操作,對原始Stream進行“變化”並生成新的Stream
  3. 使用完結操作,生成最終結果 
    也就是

相關文章