Java8 之 Lambda表達式
-
- 1.函數式接口
-
- 1.1 常用的函數式接口
- 1.2 自定義函數式接口
- 2.Lambda表達式
-
- 2.1 案例
- 3.類型推斷
Java8 中的 Lambda表達式 需要“函數式”接口的支援;
1.函數式接口
函數式接口 :隻有一個抽象方法的接口;
1.1 常用的函數式接口
- 消費型接口:
Consumer
void accept(T t);
- 供給型接口:
Supplier
T get();
- 函數型接口:
Function<T, R>
R apply(T t);
- 斷言型接口:
Predicate
boolean test(T t);
其他函數式接口可在 java.util.function 包中擷取學習;
1.2 自定義函數式接口
@FunctionalInterface
public interface XXX<T , ...> {
XXX xxx(T t , ...);
}
注意:
- 使用 @FunctionalInterface 辨別類,表示這是一個函數式接口,内部隻能存在一個抽象方法;
2.Lambda表達式
結構 : (…) -> {…}
-> Lambda操作符 (或稱為 剪刀操作符 )
左邊 入參
右邊 Lambda 體,即 Lambda 表達式要執行的功能
2.1 案例
Consumer consumer = (t) -> System.out.println(t);
Supplier supplier = () -> “hello”;
Function<String, String> function = (t) -> t + “world”;
Predicate predicate = (t) -> t >= 60;
3.類型推斷
Lambda 表達式中無需指定類型,程式依然可以編譯,這是因為 javac 根據程式的上下文,在背景推斷出了參數的類型。 Lambda 表達式的類型依賴于上下文環境,是由編譯器推斷出來的。這就是所謂的“類型推斷”。
注意:
- Lambda表達式 與 函數式接口 中的方法,入參和出參都是一一對應的;
- 左邊隻有一個入參時,() 可以不寫;
- 右邊代碼塊隻有一句時,{} 可以不寫;
- 入參的類型是由JVM自動推斷得到的;