java8 新特性之Lambda 表示式

lixon166發表於2021-01-17

Lambda 表示式介紹

Lambda 表示式,也可稱為閉包,它是推動 Java 8 釋出的最重要新特性。

Lambda 允許把函式作為一個方法的引數(函式作為引數傳遞進方法中)。

使用 Lambda 表示式可以使程式碼變的更加簡潔緊湊。

語法

lambda 表示式的語法格式如下:

(parameters) -> expression
或
(parameters) ->{ statements; }

** 以下是lambda表示式的重要特徵:

  • 可選型別宣告:不需要宣告引數型別,編譯器可以統一識別引數值。
  • 可選的引數圓括號:一個引數無需定義圓括號,但多個引數需要定義圓括號。
  • 可選的大括號:如果主體包含了一個語句,就不需要使用大括號。
  • 可選的返回關鍵字:如果主體只有一個表示式返回值則編譯器會自動返回值,大括號需要指定明表示式返回了一個數值。

例如:

// 1. 不需要引數,返回值為 5  () -> 5  
  
// 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)

程式碼示例:

package cn.wh.java8.chapter.one;public class Lambda {    public static void main(String[] args) {        // 型別宣告
        MathOperation addition = (int a, int b) -> a + b;        // 不用型別宣告
        MathOperation subtraction = (a, b) -> a - b;        // 大括號中的返回語句
        MathOperation multiplication = (int a, int b) -> { return a * b; };        // 沒有大括號及返回語句
        MathOperation division = (int a, int b) -> a / b;
        System.out.println("10 + 5 = " + operate(10, 5, addition));
        System.out.println("10 - 5 = " + operate(10, 5, subtraction));
        System.out.println("10 x 5 = " + operate(10, 5, multiplication));
        System.out.println("10 / 5 = " + operate(10, 5, division));
        Test t = x-> System.out.println(x);
    }    private static int operate(int a, int b, MathOperation mathOperation){        return mathOperation.operation(a, b);
    }
}interface MathOperation{    int operation(int a,int b);
}interface Test{    void operation(int a);
}

 

 

需要注意的是

1、lambda 表示式只能引用標記了 final 的外層區域性變數

2、lambda 表示式的區域性變數可以不用宣告為 final,但是必須不可被後面的程式碼修改(即隱性的具有 final 的語義)

3、在 Lambda 表示式當中不允許宣告一個與區域性變數同名的引數或者區域性變數。

 

之前我們學過的方法的三要素, 引數列表、方法名、返回值

這裡的lambda表示式,預設都是實現介面唯一的抽象方法,所以方法名國定。如果lambda表示式的方法體沒有內容,就代表這個表示式沒用用處。

所以lambda表示式的三要素: 引數列表、方法體、返回值

(引數型別 引數名) -> {
    方法體;    return 返回值;
}

正常寫法如上所示,

根據lambda的重要特徵,可以總結,

1、一個引數無需用括號,但多個引數需要括號,例如:

// 一個引數無需括號Test t = x-> System.out.println(x);// 多個引數需要括號MathOperation subtraction = (a, b) -> a - b;

2、引數型別可以宣告也可以不宣告,例如:

// 型別宣告MathOperation addition = (int a, int b) -> a + b;// 不用型別宣告MathOperation subtraction = (a, b) -> a - b;

3、方法體如果只有一句 花括號可寫可不寫,例如:

 // 大括號中的返回語句MathOperation multiplication = (int a, int b) -> { return a * b; };// 沒有大括號及返回語句MathOperation division = (int a, int b) -> a / b;

4、方法體只有一句的話,預設會把結果當做返回值,所以return可以寫也可以不寫,程式碼如上。

 

需要注意的應該就上面的四點。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69992808/viewspace-2750555/,如需轉載,請註明出處,否則將追究法律責任。

相關文章