Lambda 表達(dá)式的基礎(chǔ)語(yǔ)法:Java8中引入了一個(gè)新的操作符 "->" 該操作符稱為箭頭操作符或 Lambda 操作符,箭頭操作符將 Lambda 表達(dá)式拆分成兩部分:
左側(cè):Lambda 表達(dá)式的參數(shù)列表佛吓;
右側(cè):Lambda 表達(dá)式中所需執(zhí)行的功能搜变, 即 Lambda 體;
對(duì)應(yīng)的每種語(yǔ)法,這里都會(huì)給出一個(gè)栗子,方便大家的理解歼跟。
語(yǔ)法格式一:無(wú)參數(shù),無(wú)返回值
() -> System.out.println("Hello Lambda!");
@Test
public void test1(){
int num = 0;//jdk 1.7 前格遭,必須是 final
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("Hello World!" + num);
}
};
r.run();
System.out.println("-------------------------------");
Runnable r1 = () -> System.out.println("Hello Lambda!");
r1.run();
}
語(yǔ)法格式二:有一個(gè)參數(shù)嘹承,并且無(wú)返回值
(x) -> System.out.println(x)
@Test
public void test2(){
Consumer<String> con = (x) -> System.out.println(x);
con.accept("有一個(gè)參數(shù),并且無(wú)返回值");
}
語(yǔ)法格式三:若只有一個(gè)參數(shù)如庭,小括號(hào)可以省略不寫
x -> System.out.println(x)
@Test
public void test3(){
Consumer<String> con = x -> System.out.println(x);
con.accept("若只有一個(gè)參數(shù),小括號(hào)可以省略不寫");
}
語(yǔ)法格式四:有兩個(gè)以上的參數(shù)撼港,有返回值坪它,并且 Lambda 體中有多條語(yǔ)句
Comparator<Integer> com = (x, y) -> {
System.out.println("函數(shù)式接口");
return Integer.compare(x, y);
};
@Test
public void test4(){
Comparator<Integer> com = (x, y) -> {
System.out.println("函數(shù)式接口");
return Integer.compare(x, y);
};
}
語(yǔ)法格式五:若 Lambda 體中只有一條語(yǔ)句, return 和 大括號(hào)都可以省略不寫
Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
@Test
public void test5(){
Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
}
語(yǔ)法格式六:Lambda 表達(dá)式的參數(shù)列表的數(shù)據(jù)類型可以省略不寫帝牡,因?yàn)镴VM編譯器通過上下文推斷出往毡,數(shù)據(jù)類型,即“類型推斷”
(Integer x, Integer y) -> Integer.compare(x, y);
(Integer x, Integer y) -> Integer.compare(x, y);
(x,y) -> Integer.compare(x,y)
ok靶溜,講到這里語(yǔ)法就差不多了在這里了开瞭,如果掌握了這些我想應(yīng)該能解決平時(shí)正常的需求懒震,這里有一副對(duì)聯(lián):
上聯(lián):左右遇一括號(hào)省
下聯(lián):左側(cè)推斷類型省
橫批:能省則省
這里講一個(gè)大家需要注意的地方:
Lambda 表達(dá)式需要“函數(shù)式接口”的支持
函數(shù)式接口:接口中只有一個(gè)抽象方法的接口,稱為函數(shù)式接口嗤详。 可以使用注解@FunctionalInterface 修飾个扰,可以檢查是否是函數(shù)式接口。函數(shù)式接口我將在下一篇文章進(jìn)行講述葱色,這也是一個(gè)蠻重要的知識(shí)點(diǎn)递宅。
Lambda表達(dá)式學(xué)習(xí)(三)Lambda 表達(dá)式需要“函數(shù)式接口”的支持