Java8 - Lambda表達式

Java8 之 Lambda表達式

Java8 中的 Lambda表達式 須要「函數式」接口的支持;java

1.函數式接口

函數式接口 :只有一個抽象方法的接口;api

1.1 經常使用的函數式接口

  • 消費型接口:

Consumer<T>oracle

void accept(T t);
  • 供給型接口:

Supplier<T>app

T get();
  • 函數型接口:

Function<T, R>函數

R apply(T t);
  • 斷言型接口:

Predicate<T>學習

boolean test(T t);

其餘函數式接口可在 java.util.function 包中獲取學習;code

1.2 自定義函數式接口

@FunctionalInterface
public interface XXX<T , ...> {

    XXX xxx(T t , ...);
}

注意:接口

  • 使用 @FunctionalInterface 標識類,表示這是一個函數式接口,內部只能存在一個抽象方法;

2.Lambda表達式

結構 : (...) -> {...}get

-> Lambda操做符 (或稱爲 剪刀操做符 )編譯器

左邊 入參

右邊 Lambda 體,即 Lambda 表達式要執行的功能

2.1 案例

Consumer<String> consumer = (t) -> System.out.println(t);

Supplier<String> supplier = () -> "hello";

Function<String, String> function = (t) -> t + "world";

Predicate<Integer> predicate = (t) -> t >= 60;

3.類型推斷

Lambda 表達式中無需指定類型,程序依然能夠編譯,這是由於 javac 根據程序的上下文,在後臺推斷出了參數的類型。 Lambda 表達式的類型依賴於上下文環境,是由編譯器推斷出來的。這就是所謂的「類型推斷」。

注意:

  • Lambda表達式 與 函數式接口 中的方法,入參和出參都是一一對應的;
  • 左邊只有一個入參時,() 能夠不寫;
  • 右邊代碼塊只有一句時,{} 能夠不寫;
  • 入參的類型是由JVM自動推斷獲得的;
相關文章
相關標籤/搜索