Java的Lambda表達式

1、Lambda的介紹

  Lambda的作用是替代一個匿名函數,由於匿名函數有許多冗餘代碼,即降低了編寫效率,也影響閱讀,於是jdk8引進了Lambda表達式,用於簡化書寫。

2、問題引入

​  在Java多線程這篇博客中,我介紹了兩種使用Runnable接口創建線程的方法。其中一種就是自定義類實現Runnable接口,另外一種就是使用匿名函數。這兩種方法本質上是一樣的:

new Thread(new Runnable() {
    @Override
    public void run() {
       System.out.println("hello Lambda");
    }
}).start();

  可能有人覺得這樣就挺簡潔了,但是一對比Lambda表達式,就會發現其實有一些代碼時沒有必要的

new Thread(
    () -> System.out.println("hello Lambda")
).start();

這樣,問題就出來了:

  1. 爲了指定run()的方法體,必須編寫Runnable接口的實現類;
  2. 或者爲了省去定義一個Runnable實現類的麻煩,不得不使用匿名內部類;
  3. 必須覆蓋重寫抽象run方法,所以方法名稱、方法參數、方法返回值不得不再寫一遍,且不能寫錯;
  4. 但是實際上,真正有用的代碼只有方法體代碼

3、 Lambda標準格式

Lambda省去面向對象的條條框框,格式由3個部分組成:

  • 一個括號(參數列表)
  • 一個箭頭
  • 一段代碼(方法體)

Lambda表達式的標準格式爲:

(參數類型 參數名稱) -> { 代碼語句 }

格式說明:

  1. 小括號內的語法與傳統方法參數列表一致:無參數則留空;多個參數則用逗號分隔。
  2. ->是新引入的語法格式,代表指向動作。
  3. 大括號內的語法與傳統方法體要求基本一致。

4、Lambda實戰

4.1、無參無返回值的Lambda

  定義一個兒子Son接口,內只能含唯一的抽象方法,且無參數、無返回值:(爲什麼是唯一,請看下一篇博客函數式接口)

public interface Son {
    void study();
}

  定義一個父親Father類,催促兒子去學習啦:

public class Father {
    private static void urge(Son son) {
        son.study();
    }
}

結果輸出:

public static void main(String[] args) {
    urge(() -> {
      	System.out.println("去學習了");
    });
}

4.2、有參有返回值的Lambda

  定義一個計算器Calculator接口,內含唯一的抽象方法:

public interface Calculator {
    int calc(int a, int b);
}

  在下面的代碼中,請使用Lambda的標準格式調用invokeCalc方法,完成120和130的相加計算:

public class Demo1 {
    private static void invokeCalc(int a, int b, Calculator calculator) {
        int result = calculator.calc(a, b);		// 將參數a,b傳遞給接口的抽象方法calc
        System.out.println("結果是:" + result);
    }
}

結果輸出:

public static void main(String[] args) {
    invokeCalc(120, 130, (int a, int b) -> {
      	return a + b;
    });
}

5、Lambda的省略格式

可推導即可省略!

public static void main(String[] args) {
  	invokeCalc(120, 130, (a, b) -> a + b);
}

省略寫法的規則:

  1. 小括號內參數的類型可以省略;
  2. 如果小括號內有且僅有一個參,則小括號可以省略;
  3. 如果大括號內有且僅有一個語句,則無論是否有返回值,都可以省略大括號、return關鍵字及語句分號。

有錯誤的地方敬請指出!覺得寫得可以的話麻煩給個贊!歡迎大家評論區或者私信交流!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章