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