Lambda表達式
Lambda是一個匿名函數(shù),我們可以把Lambda表達式理解為是一段可以傳遞的代碼(將代碼像數(shù)據(jù)一樣進行傳遞)。使用它可以寫出更簡潔、更靈活的代碼。作為一種更緊湊的代碼風格,使Java的語言表達能力得到了提升。
本質(zhì): 作為函數(shù)式接口的實例, 沒有接口就沒意義了.
// 簡單使用舉例
@Test
public void test1(){
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("r1 is running...");
}
};
r1.run();
// lambda寫法
Runnable r2 = () -> System.out.println("r2 is running...");
r2.run();
}
@Test
public void test2(){
Comparator<Integer> intcmp = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1, o2);
}
};
System.out.println(intcmp.compare(1, 2));
Comparator<Integer> intcmp2 = Integer::compare; // 方法引用
// 和intcmp2等價, 但lambda
Comparator<Integer> intcmp3 = (Integer o1, Integer o2) -> Integer.compare(o1,o2);
// 和intcmp2等價, 但lambda
Comparator<Integer> intcmp4 = (o1, o2) -> Integer.compare(o1,o2);
System.out.println(intcmp2.compare(2, 1));
System.out.println(intcmp3.compare(2, 1));
System.out.println(intcmp4.compare(2, 1));
}
這兩個代碼片段分別創(chuàng)建了匿名內(nèi)部類的實例,分別用于實現(xiàn)Comparator<Integer>
接口和Runnable
接口。
當接口只有一個抽象方法時(函數(shù)式接口)用lambda改寫會更簡潔. 在實際開發(fā)中,通常更傾向于使用Lambda 表達式,因為它使代碼更簡潔且易讀。
操作符解釋以及l(fā)ambda的6種語法格式
-> : lambda操作符
-> 左邊: lambda形參列表, 其實就是接口中的抽象方法中的形參列表
-> 右邊: lambda體, 其實就是重寫的抽象方法的方法體文章來源:http://www.zghlxwxcb.cn/news/detail-746881.html
語法格式一: 無參, 無返回值
Runnable r2 = () -> System.out.println("r2 is running...");
語法格式二: 一個參數(shù), 無返回值
Consumer<String> cons2 = (String s) -> System.out.println(s);
cons2.accept("cons2");
語法格式三: 數(shù)據(jù)類型可以省略, 因為可由編譯器推斷得出, 稱為'類型推斷'
Comparator<Integer> intcmp4 = (o1, o2) -> Integer.compare(o1,o2);
Consumer<String> cons2 = (s) -> System.out.println(s);
語法格式四: lambda若只需要一個參數(shù), 參數(shù)的小括號可以省略
Consumer<String> cons2 = s -> {System.out.println(s);};
語法格式五: lambda需要兩個或以上的參數(shù), 多條執(zhí)行語句, 并且可以有返回值
Comparator<Integer> intcmp5 = (o1, o2) -> {
System.out.println("intcomp5");
return Integer.compare(o1, o2);
};
System.out.println(intcmp5.compare(2, 3));
語法格式六: lambda只有一條語句, return與大括號若有, 都可以省略
Comparator<Integer> intcmp4 = (o1, o2) -> Integer.compare(o1,o2);
總結
-> 左邊: lambda形參列表的參數(shù)類型可以省略(因為有類型推斷); 如果lambda形參列表只有一個參數(shù), 括號()也可以省略;
-> 右邊: lambda體應該用一對{}包裹; 如果lambda體只有一條執(zhí)行語句(可能是return 語句), 可以省略這一對{}和return關鍵字.文章來源地址http://www.zghlxwxcb.cn/news/detail-746881.html
到了這里,關于Java8新特性lambda學習的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!