1.22 Lambda表达式的3种简写方式
使用 Lambda 表達式是為了簡化程序代碼,Lambda 表達式本身也提供了多種簡化形式,這些簡化形式雖然簡化了代碼,但客觀上使得代碼可讀性變差。本節介紹 Lambda 表達式的幾種簡化形式。
省略參數類型
Lambda 表達式可以根據上下文環境推斷出參數類型。calculate 方法中 Lambda 表達式能推斷出參數 a 和 b 是 int 類型,簡化形式如下:
public static Calculable calculate(char opr) {Calculable result;if (opr == '+') {// Lambda表達式實現Calculable接口5 result = (a, b) -> {return a + b;};} else {// Lambda表達式實現Calculable接口10 result = (a, b) -> {return a - b;};}return result; }代碼第 5 行和第 10 行是result = (int a, int b) -> {代碼的簡化寫法,其中 a 和 b 是參數。
省略參數小括號
如果 Lambda 表達式中的參數只有一個,可以省略參數小括號。修改 Calculable 接口中的 calculateInt 方法,代碼如下。
// 可計算接口 @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接口// 標準形式25 result = (int a) -> {return a * a;};} else {// Lambda表達式實現Calculable接口// 省略形式 31 result = a -> {return a * a * a;};}return result; }上述代碼第 25 行和第 31 行都是實現 Calculable 接口的 Lambda 表達式。代碼第 25 行是標準形式沒有任何的簡化。代碼第 31 行省略了參數類型和小括號。
輸出結果為:
10二次方 = 100 10三次方 = 1000省略return和大括號
如果 Lambda 表達式體中只有一條語句,那么可以省略 return 和大括號,代碼如下:
public static Calculable calculate(int power) {Calculable result;if (power == 2) {// Lambda表達式實現Calculable接口// 標準形式result = (int a) -> {return a * a;};} else {// Lambda表達式實現Calculable接口// 省略形式12 result = a -> a * a * a;}return result; }上述代碼第 12 行是省略了 return 和大括號,這是最簡化形式的 Lambda 表達式了,代碼太簡潔了,但是對于初學者而言很難理解這個表達式。
總結
以上是生活随笔為你收集整理的1.22 Lambda表达式的3种简写方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.21 Lambda表达式
- 下一篇: 1.12 接口(Interface)的定