public static Calculable calculate(char opr) { Calculable result; if (opr == '+') { // Lambda表示式實現Calculable介面 result = (a, b) -> { return a + b; }; } else { // Lambda表示式實現Calculable介面 result = (a, b) -> { return a - b; }; } return result; }程式碼第 5 行和第 10 行是《Java Lambda表示式》一節範例中
result = (int a, int b) -> {
程式碼的簡化寫法,其中 a 和 b 是引數。
// 可計算介面 @FunctionalInterface public interface Calculable { // 計算一個int數值 int calculateInt(int a); }其中 calculateInt 方法只有一個 int 型別引數,返回值也是 int 型別。呼叫 calculateInt 方法程式碼如下:
public static void main(String[] args) { int n1 = 10; // 實現二次方計算Calculable物件 Calculable f1 = calculate(2); // 實現三次方計算Calculable物件 Calculable f2 = calculate(3); // 呼叫calculateInt方法進行加法計算 System.out.printf("%d二次方 = %d n", n1, f1.calculateInt(n1)); // 呼叫calculateInt方法進行減法計算 System.out.printf("%d三次方 = %d n", n1, f2.calculateInt(n1)); } /** * 通過冪計算 * * @param power 冪 * @return 實現Calculable介面物件 */ public static Calculable calculate(int power) { Calculable result; if (power == 2) { // Lambda表示式實現Calculable介面 // 標準形式 result = (int a) -> { return a * a; }; } else { // Lambda表示式實現Calculable介面 // 省略形式 result = a -> { return a * a * a; }; } return result; }上述程式碼第 25 行和第 31 行都是實現 Calculable 介面的 Lambda 表示式。程式碼第 25 行是標準形式沒有任何的簡化。程式碼第 31 行省略了引數型別和小括號。
10二次方 = 100
10三次方 = 1000
public static Calculable calculate(int power) { Calculable result; if (power == 2) { // Lambda表示式實現Calculable介面 // 標準形式 result = (int a) -> { return a * a; }; } else { // Lambda表示式實現Calculable介面 // 省略形式 result = a -> a * a * a; } return result; }上述程式碼第 12 行是省略了 return 和大括號,這是最簡化形式的 Lambda 表示式了,程式碼太簡潔了,但是對於初學者而言很難理解這個表示式。