Java 教程
Lambda 表達(dá)式,也可稱為閉包,它是推動 Java 8 發(fā)布的最重要新特性。
Lambda 允許把函數(shù)作為一個方法的參數(shù)(函數(shù)作為參數(shù)傳遞進(jìn)方法中)。
使用 Lambda 表達(dá)式可以使代碼變的更加簡潔緊湊。
lambda 表達(dá)式的語法格式如下:
以下是lambda表達(dá)式的重要特征:
Lambda 表達(dá)式的簡單例子:
// 1. 不需要參數(shù),返回值為 5 () -> 5 // 2. 接收一個參數(shù)(數(shù)字類型),返回其2倍的值 x -> 2 * x // 3. 接受2個參數(shù)(數(shù)字),并返回他們的差值 (x, y) -> x – y // 4. 接收2個int型整數(shù),返回他們的和 (int x, int y) -> x + y // 5. 接受一個 string 對象,并在控制臺打印,不返回任何值(看起來像是返回void) (String s) -> System.out.print(s)
在 Java8Tester.java 文件輸入以下代碼:
執(zhí)行以上腳本,輸出結(jié)果為:
$ javac Java8Tester.java $ java Java8Tester 10 + 5 = 15 10 - 5 = 5 10 x 5 = 50 10 / 5 = 2 Hello Runoob Hello Google
使用 Lambda 表達(dá)式需要注意以下兩點(diǎn):
lambda 表達(dá)式只能引用標(biāo)記了 final 的外層局部變量,這就是說不能在 lambda 內(nèi)部修改定義在域外的局部變量,否則會編譯錯誤。
在 Java8Tester.java 文件輸入以下代碼:
執(zhí)行以上腳本,輸出結(jié)果為:
$ javac Java8Tester.java $ java Java8Tester Hello! Runoob
我們也可以直接在 lambda 表達(dá)式中訪問外層的局部變量:
lambda 表達(dá)式的局部變量可以不用聲明為 final,但是必須不可被后面的代碼修改(即隱性的具有 final 的語義)
int num = 1; Converter<Integer, String> s = (param) -> System.out.println(String.valueOf(param + num)); s.convert(2); num = 5; //報(bào)錯信息:Local variable num defined in an enclosing scope must be final or effectively final
在 Lambda 表達(dá)式當(dāng)中不允許聲明一個與局部變量同名的參數(shù)或者局部變量。
String first = ""; Comparator<String> comparator = (first, second) -> Integer.compare(first.length(), second.length()); //編譯會出錯