快速瞭解Lambda表示式-Java
阿新 • • 發佈:2020-02-16
目錄
- lambda表示式
- 前言
- 簡介
- 簡單入門
- 用法
- 好處
- 總結
lambda表示式
前言
最近因為疫情,也不能正常返校什麼的,希望大家都能好好的,希望武漢加油,中國加油,在家也看了很多視訊,學了一點新的東西,雖然懶惰,但是也要努力啊。今天記錄分享Lambda表示式的知識。
Lambda表示式是JDK8新增的特性 下面的圖就是JDK8的新特性,JDK5和JDK8相對來說都是比較重要有的Java版本。
所以學習使用其中的新特性也是比較重要的。
簡介
Lambda表示式指的是應用在單一抽象方法介面環境下的一種簡化定義形式,可以用來解決匿名內部類的定義複雜問題。
今天這篇講的是lambda表示式,它是一種新的語法規則。它是一種匿名函式,簡單地說,它是沒有宣告的方法,也即沒有訪問修飾符、返回值宣告和名字。它可以寫出更簡潔、更靈活的程式碼。作為一種更緊湊簡潔的程式碼風格,使 Java 語言的表達能力得到了提升。
簡單入門
interface Message { public void print(); } public class TestDemo { public static void main(String[] args){ //lambda表示式,這裡是覆寫介面中的print方法 fun() -> System.out.println("hello world"); //原來的寫法 // fun(new Message(){ // @Override // public void print)() { // System.out.println("hello world"); //} //}); } public static void print(Message msg){ msg.print(); } }
用法
Lambda的基本語法如下
(引數) -> 方法體/lambda體
解析:
左邊是成員列表/形參列表(有時就是介面中的抽象方法的方法引用)
右邊的方法體是要重寫的抽象方法的方法體
-> 是操作符,也叫做lambda箭頭操作符
簡單示例
// 1. 不需要引數,返回值為 () -> 1 // 2. 接收一個引數(數字型別),返回其2倍的值 x -> 2 * x // 3. 接受2個引數(數字),並返回他們的差值 (x, y) -> x – y // 4. 接收2個int型整數,返回他們的和 (int x, int y) -> x + y // 5. 接受一個 string 物件,並在控制檯列印,不返回任何值(看起來像是返回void) (String s) -> System.out.print(s)
具體使用方法/寫法-一共可以分為六種情況去寫。
/**
* @Author: yhy
* @Time: 22:37
* 用來測試使用lambda語句
*/
public class LambdaDemo {
// -> lambda操作符
// 情況一:無參且無返回值
@Test
public void test1() {
// 原來的寫法
Runnable r0 = new Runnable() {
@Override
public void run() {
System.out.println("abc");
}
};
// lambda寫法
Runnable r = () -> System.out.println("abc");
r.run();
}
//情況二 需要一個引數,但沒有返回值
// 原始寫法
Consumer<String> con = new Consumer<>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
// lambda寫法
Consumer<String> con2 = (String s) -> {
System.out.println(s);
};
//情況三:資料型別省略,可推斷出類,又叫做型別推斷 前面已經知道是string型別了
// 所以這裡直接省略了後面的括號的string型別說明
// 和泛型的格式很像,可以省略後面的型別說明
Consumer<String> con3 = (s) -> {
System.out.println(s);
};
// 情況四:一個引數的時候, 括號可以不寫 下面的s就是一個引數
@Test
public void test2() {
Consumer<String> con4 = s -> {
System.out.println(s);
};
con4.accept("abcdefg");
}
// 情況五:需要兩個或者以上的引數,且方法中多條執行語句,並且有返回值
@Test
public void test3() {
// 原來的寫法
Comparator<Integer> com = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
System.out.println(o1);
System.out.println(o2);
return o1.compareTo(02);
}
};
System.out.println(com.compare(13,15));
// lambda表示式
System.out.println("------------------");
Comparator<Integer> com2 =(o1,o2) -> {
return o1.compareTo(02);
};
System.out.println(com2.compare(14,12));
}
// 情況六:當lambda只有一條語句時候,可以在lambda體中省略括號和return
@Test
public void test4(){
// 原來的寫法
Comparator<Integer> com1 = (o1,o2) -> {return o1;};
}
// lambda規則六表示式寫法
Comparator <Integer> com2 = (o1, o2) -> o1;
}
好處
能夠簡潔,快速寫程式碼,看的出程式碼量差別,但是有一說一,有時不會很好懂,但是看得懂還是最基本的要求。
總結
表示式的左邊:Lambda形參列表的引數型別可以省略,如果只有一個引數的時候,也可以省略括號
表示式的右邊:Lambda體,一對{}包裹著,只有一條執行語句的時候,也可以省略大括號,若有返回值,省略的時候也可以省略return
最後,以前用匿名內部類的地方都可以使用Lambda表示式類代替.
這一篇文字沒寫多少,因為我覺得學的太慢了,不能浪費太多時間在做部落格上,所以以記錄分享為主,菜鳥一枚,加油,共勉!