最近由於疫情,也不能正常返校什麼的,但願你們都能好好的,但願武漢加油,中國加油,在家也看了不少視頻,學了一點新的東西,雖然懶惰,可是也要努力啊。今天記錄分享Lambda表達式的知識。ide
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箭頭操做符
// 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形參列表的參數類型能夠省略,若是隻有一個參數的時候,也能夠省略括號code
表達式的右邊:Lambda體,一對{}包裹着,只有一條執行語句的時候,也能夠省略大括號,如有返回值,省略的時候也能夠省略return視頻
最後,之前用匿名內部類的地方均可以使用Lambda表達式類代替.對象
這一篇文字沒寫多少,由於我以爲學的太慢了,不能浪費太多時間在作博客上,因此以記錄分享爲主,菜鳥一枚,加油,共勉!接口