前言


  • Lambda 表達式,也可稱為閉包,它是推動 Java 8 發布的最重要新特性。
  • Lambda 允許把函數作為參數傳遞進方法中。
  • 使用 Lambda 表達式可以使代碼變的更加簡潔緊湊。
  • lambda表達式的重要特征:
    1. 可選類型聲明:不需要聲明參數類型,編譯器可以統一識別參數值。
    2. 可選的參數圓括號:一個參數無需定義圓括號,但多個參數需要定義圓括號。
    3. 可選的大括號:如果主體包含了一個語句,就不需要使用大括號。
    4. 可選的返回關鍵字:如果主體只有一個表達式返回值則編譯器會自動返回值,大括號需要指定明表達式返回了一個數值。

JDK8 之前調用接口的方式是通過匿名內部類,調用接口中的方法。
@FunctionalInterface
public interface FunctionInterface {void get();
}public class FunctionTest {public static void main(String[] args) {FunctionInterface functionInterface = new FunctionInterface() {@Overridepublic void get() {System.out.println("get方法");}};functionInterface.get();}
}
使用Lambda表達式調用接口中的方法
@FunctionalInterface
public interface FunctionInterface {void get();
}public class FunctionTest {public static void main(String[] args) {FunctionInterface ft = () -> {System.out.println("JDK8 Lambda表達式調用:get方法");};ft.get();}
}

() : 表示抽象方法所需的參數列表,(參數1,參數2)
-> : 固定格式
{} :表示抽象方法的方法體

有返回值的Lambda表達式調用方法
@FunctionalInterface
public interface FunctionInterface2 {String get();
}
public class FunctionTest {public static void main(String[] args) {FunctionInterface2 functionInterface2 = () -> {return "有返回值的Lambda表達式調用方法";};System.out.println(functionInterface2.get());/*** 優化:有返回值的Lambda表達式調用方法*/FunctionInterface2 functionInterface3 = () -> "優化:有返回值的Lambda表達式調用方法";System.out.println(functionInterface3.get());}
}
有參數,有返回值的Lambda表達式調用方法
@FunctionalInterface
public interface FunctionInterface3 {String get(String s);
}
public class FunctionTest {public static void main(String[] args) {FunctionInterface3 ft3 = (String s)-> s;System.out.println(ft3.get("有參數,有返回值的Lambda表達式調用方法"));}
}