使用 Lambda 表達式是為了簡化程序代碼,Lambda 表達式本身也提供了多種簡化形式,這些簡化形式雖然簡化了代碼,但客觀上使得代碼可讀性變差。本節介紹 Lambda 表達式的幾種簡化形式。
Lambda 表達式可以根據上下文環境推斷出參數類型。calculate 方法中 Lambda 表達式能推斷出參數 a 和 b 是 int 類型,簡化形式如下:
public static Calculable calculate(char opr) { Calculable result; if (opr == '+') { result = (a, b) -> { return a + b; }; } else { result = (a, b) -> { return a - b; }; } return result;}代碼第 5 行和第 10 行是《Java Lambda表達式》一節示例中result = (int a, int b) -> {代碼的簡化寫法,其中 a 和 b 是參數。
省略參數小括號如果 Lambda 表達式中的參數只有一個,可以省略參數小括號。修改 Calculable 接口中的 calculateInt 方法,代碼如下。
@FunctionalInterfacepublic interface Calculable { int calculateInt(int a);}其中 calculateInt 方法只有一個 int 類型參數,返回值也是 int 類型。調用 calculateInt 方法代碼如下:
public static void main(String[] args) { int n1 = 10; Calculable f1 = calculate(2); Calculable f2 = calculate(3); System.out.printf("%d二次方 = %d \n", n1, f1.calculateInt(n1)); System.out.printf("%d三次方 = %d \n", n1, f2.calculateInt(n1));}public static Calculable calculate(int power) { Calculable result; if (power == 2) { result = (int a) -> { return a * a; }; } else { result = a -> { return a * a * a; }; } return result;}上述代碼第 25 行和第 31 行都是實現 Calculable 接口的 Lambda 表達式。代碼第 25 行是標準形式沒有任何的簡化。代碼第 31 行省略了參數類型和小括號。
輸出結果為:10二次方 = 100
省略return和大括號
10三次方 = 1000如果 Lambda 表達式體中只有一條語句,那麼可以省略 return 和大括號,代碼如下:
public static Calculable calculate(int power) { Calculable result; if (power == 2) { result = (int a) -> { return a * a; }; } else { result = a -> a * a * a; } return result;}上述代碼第 12 行是省略了 return 和大括號,這是最簡化形式的 Lambda 表達式了,代碼太簡潔了,但是對於初學者而言很難理解這個表達式。