Lambda 是一個匿名函數,我們可以把 Lambda 表達式理解為是一段可以傳遞的代碼(將代碼像數據一樣進行傳遞)。可以寫出更簡潔、更靈活的代碼。作為一種更緊湊的代碼風格,使 Java的語言表達能力得到了提升。
匿名內部類的寫法
Comparator
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1, o2);
}
};
Runnable runnable = new Runnable() {
@Override
public void run() {}
};
這樣寫會發現一個問題,實現的方法是冗餘的代碼,實際當中並沒有什麼用處。我們看看Lamda的寫法。
Lambda表達式的寫法
Comparator
Runnable runnable = () -> System.out.println("Lambda表達式");
我們會發現Lambda表達式的寫法更加的簡潔、靈活。它只關心參數和執行的功能(具體需要幹什麼,比如->後的Integer.compare(x, y))。
Lambda 表達式語法
Lambda 表達式在Java 語言中引入了一個新的語法元 素和操作符。這個操作符為 “->” , 該操作符被稱為 Lambda 操作符或剪頭操作符。它將 Lambda 分為 兩個部分:
左側:指定了 Lambda 表達式需要的所有參數
右側:指定了 Lambda 體,即 Lambda 表達式要執行的功能。
語法格式一:無參,無返回值,Lambda 體只需一條語句
Runnable runnable = () -> System.out.println("lamda表達式");
語法格式二:Lambda 只需要一個參數
Consumer
語法格式三:Lambda 只需要一個參數時,參數的小括號可以省略
Consumer
語法格式四:Lambda 需要兩個參數
Comparator
語法格式五:當 Lambda 體只有一條語句時,return 與大括號可以省略
BinaryOperator
語法格式六:數據類型可以省略,因為可由編譯器推斷得出,稱為“類型推斷”
BinaryOperator
System.out.println("Lambda");
return x+y;};
類型推斷
上述 Lambda 表達式中的參數類型都是由編譯器推斷得出的。Lambda 表達式中無需指定類型,程序依然可以編譯,這是因為 javac 根據程序的上下文,在後臺 推斷出了參數的類型。Lambda 表達式的類型依賴於上 下文環境,是由編譯器推斷出來的。這就是所謂的 “類型推斷”。
閱讀更多 IT碼將 的文章