什么是Lambda表達式:簡單來說,可以看成是對匿名內部類的縮寫,使用Lambda表達式,接口必須是函數式接口。
Lambda 表達式作用:使用 Lambda 表達式可以使代碼變的更加簡潔緊湊
Lambda 表達式,也可稱為閉包,它是推動 Java 8 發布的最重要新特性
語法
lambda 表達式的語法格式如下:
(parameters) -> expression 或 (parameters) ->{ statements; }
以下是lambda表達式的重要特征:
- 可選類型聲明:不需要聲明參數類型,編譯器可以統一識別參數值。
- 可選的參數圓括號:一個參數無需定義圓括號,但多個參數需要定義圓括號。
- 可選的大括號:如果主體包含了一個語句,就不需要使用大括號。
- 可選的返回關鍵字:如果主體只有一個表達式返回值則編譯器會自動返回值,大括號需要指定明表達式返回了一個數值。
Lambda 表達式實例
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)
下面代碼示例如:
首先定義一個接口如:
CryptonymInnerInterface
package com.test.cgb;
public interface CryptonymInnerInterface {
// 定義一個抽象方法sum
public int sum(int numberOne, int numberTwo);
}
測試類如:
package com.test.cgb;
public class CryptonymInnerTest {
public static void main(String[] args) {
/*
* 匿名內部類的方式:因為平時是把類看成是一個模板,為了復用性才會把類寫在一個java文件里;
* 但是這里我們不需要重復使用該類,所以可以不用編寫類文件,而是使用匿名內部類的方式。
*/
// CryptonymInnerInterface m1 = new CryptonymInnerInterface() {
// @Override
// public int sum(int numberOne, int numberTwo) {
// return numberOne + numberTwo;
// }
// };
// System.out.println(m1.sum(123,456));
/**
* 使用lambda表達式
*/
// 第一種寫法(常規寫法):
CryptonymInnerInterface m1 = (int numberOne, int numberTwo) -> {
return numberOne + numberTwo;
};
m1.sum(123, 456);
/**
* 第二種寫法(簡寫):
* 1.形參列表的數據類型可以不寫,自動判斷
* 2.如果方法體中的代碼只有一句,可以省略{}
* 3.如果return返回數據的,則可以省略掉return
*/
CryptonymInnerInterface m2 = (numberOne, numberTwo) -> numberOne + numberTwo;
int twoSum = m2.sum(123, 456);
System.out.println(twoSum);
}
}
