JDK8 Lambda表達式

一、什麼是函數式編程和什麼是lambda表達式

在JDK8之前,Java是不⽀持函數式編程的。

所謂的函數編程:即可理解是將⼀個函數(也稱爲“行爲”)作爲⼀個參數進⾏傳遞, ⾯向對象編程是對數據的抽象(各種各樣的POJO類),而函數式編程則是對行爲的抽象(將⾏爲作爲⼀個參數進行傳遞)

Lambda 表達式是 JDK8 的一個新特性,可以取代大部分的匿名內部類,寫出更優雅的 Java 代碼,尤其在集合的遍歷和其他集合操作中,可以極大地優化代碼結構。

JDK 也提供了大量的內置函數式接口供我們使用,使得 Lambda 表達式的運用更加方便、高效。

二、舉例子說明

(1)java創建線程

jdk8之前創建線程

new Thread(new Runnable() {
     @Override
     public void run() {
         System.out.println("以前創建線程的方式");
     }
});

jdk8之後使用Lambda表達式創建線程則只需要使⽤⼀句話

new Thread(() -> System.out.println("使用Lambda之後創建線程的方式"));

(2)集合容器⾥⾯的字符串排序

使⽤前

    List<String> list = Arrays.asList("aaa","ggg","ffff","ccc");
    Collections.sort(list, new Comparator<String>() {
         @Override
         public int compare(String a, String b) {
             return b.compareTo(a);
         }
    });

    for (String string : list) {
        System.out.println(string);
    }

使用後

List<String> list =Arrays.asList("aaa","ggg","ffff","ccc");
	Collections.sort(list, (a,b)->b.compareTo(a)
 );
 for (String string : list) {
	System.out.println(string);
 }

三、Lambda語法講解

(1)lambda表達式 使⽤場景(前提)

⼀個接⼝中只包含⼀個⽅法,則可以使⽤Lambda表達式,這樣的接⼝稱之爲“函數接⼝”

(2)語法 (params) -> expression

第⼀部分爲括號內⽤逗號分隔的形參,參數是函數式接⼝⾥⾯⽅法的參數

第⼆部分爲⼀個箭頭符號:->

第三部分爲⽅法體,可以是表達式和代碼塊

還有以下幾點需要注意:

  • 參數列表:括號中參數列表的數據類型可以省略不寫

                         括號中的參數只有⼀個,那麼參數類型和()都可以省略不寫

  • 方法體:如果{ }中的代碼只有⼀⾏,⽆論有沒有返回值,都可以省略{ },return,分號,要⼀起省略,其他情況則需要加上

(3)好處

 Lambda 表達式的實現⽅式在本質是以匿名內部類的⽅式進⾏實現

重構現有臃腫代碼,更⾼的開發效率,尤其是集合Collection操作的時候,後續會講到

發佈了86 篇原創文章 · 獲贊 74 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章