首頁 >Java >java教程 >實際應用中的 Lambda 表達式

實際應用中的 Lambda 表達式

Patricia Arquette
Patricia Arquette原創
2025-01-07 08:12:40707瀏覽

As expressões lambda em ação

一些將 lambda 表達式的基本概念付諸實踐的簡單範例:

範例 1 - 不使用 lambda 和使用 lambda 的實作比較

不使用 lambda:

MyValueSemLambda1 介面 {
雙 getValue(); // 抽象方法
}
類別 MyValueImpl 實作 MyValueSemLambda1{
私有雙值;
// 初始化 value
屬性的建構子 public MyValueImpl(雙值) {
this.value = 值;
}
// getValue方法的實作
@覆蓋
公雙 getValue() {
返回 this.value;
}
}
公共類別 MyValueSemLambda {
public static void main(String[] args) {
MyValueSemLambda1 myVal = new MyValueImpl(98.6); // 給屬性
賦值 System.out.println("值:" myVal.getValue()); // 印出 98.6
}
}

使用 lambda:

MyValueCompare 介面 {
double getValue();
}
公共類別 MyValueComparacao {
public static void main(String[] args) {
// 沒有屬性但傳回值的 Lambda 表達式
MyValueCompares myVal = () ->; 98.6;
System.out.println("值:" myVal.getValue()); // 印出 98.6
}
}

範例 2 - LambdaDemo

// 函數式介面。
介面 MyValue {
double getValue();
}
// 另一個函數式介面。
介面 MyParamValue {
雙 getValue(雙 v);
}
LambdaDemo 類別 {
public static void main(String args[])
{
我的值我的值; // 宣告一個介面引用
// 這裡,lambda 表達式只是一個常數表達式。
// 當賦值給myVal時,實例
被建構 // lambda 表達式實作
的類 // MyValue 的 getValue() 方法。
myVal = () ->; 98.6;一個簡單的 lambda 表達式
// 呼叫 getValue(),它是由
提供 // 先前指派的 lambda 表達式。
System.out.println("常數值:" myVal.getValue());
// 現在建立一個參數化 lambda 表達式並為其賦值
// 用於 MyParamValue 引用。此 lambda 表達式回傳
// 其參數的倒數。
MyParamValue myPval = (n) ->; 1.0/n; lambda 表達式
它有一個參數
// 透過 myPval 引用呼叫 getValue()。
System.out.println("4的倒數是" myPval.getValue(4.0));
System.out.println("8的倒數是" myPval.getValue(8.0));
// lambda 表達式必須與定義的方法相容
// 透過函數介面。因此,這些說明將無法運作:
// myVal = () ->; “三”; // 錯誤!字串與雙精度不相容!
// myPval = () ->;數學.隨機(); // 錯誤!此參數為必填項!
}
}

輸出:
恆定值:98.6
4 的倒數是 0.25
8 的倒數是 0.125

  • lambda 表達式必須與您實作的抽象方法相容。

不相容範例:

  • 如果預期回傳類型為 double,則不能使用 String 值。

  • 需要參數的方法如果不提供參數就無法使用。

  • 函數式介面可以與任何相容的 lambda 表達式一起使用。

範例 3 - NumericTest

整除性檢定: 檢查第一個數字是否能被第二個數字整除。
大小比較: 決定第一個數字是否小於第二個數字。
絕對值比較:如果兩個數字的絕對值相等,則傳回 true。

  • 在 main() 中,使用 lambda 表達式建立三個不同的測試。

// 帶有兩個參數 int 和
的函數接口 // 傳回一個布林結果。
介面 NumericTest {
布林測試(int n, int m);
}
類別 LambdaDemo2 {
public static void main(String args[])
{
// 這個 lambda 表達式判斷是否為一個數字
// 是另一個因素的一個因素。
數值測試 isFactor = (n, d) -> (n % d) == 0;
if(isFactor.test(10, 2))
System.out.println("2是10的因數");
if(!isFactor.test(10, 3))
System.out.println("3不是10的因數");
System.out.println();
// 如果
該 lambda 表達式傳回 true // 第一個參數小於第二個參數。
NumericTest 小於 = (n, m) -> (n if(lessThan.test(2, 10))
System.out.println("2小於10");
if(!lessThan.test(10, 2))
System.out.println("10不小於2");
System.out.println();
// 如果您
,則此 lambda 表達式傳回 true // 參數的絕對值相等。
NumericTest 絕對等於 = (n, m) -> (n if(absEqual.test(4, -4))
System.out.println("4和-4的絕對值相等。");
if(!lessThan.test(4, -5))
System.out.println("4和-5的絕對值不相等。");
System.out.println();
}
}

輸出:
2 是 10 的因數
3 不是 10 的因數
2 小於 10
10 不小於 2
4和-4的絕對值相等。
4和-5的絕對值不相等。

  • 相容的 lambda 表達式可以與相同的函數介面一起使用。

  • 相同的引用變數可以重複用於不同的 lambda 表達式。

  • 重複使用變數使閱讀更容易並節省程式碼資源。

  • 在範例中,相同的介面用於不同的實作:

NumericTest myTest;
myTest = (n, d) ->; (n%d)==0; //實作1
if(myTest.test(10, 2))
System.out.println("2是10的因數");
// ...
myTest = (n, m) ->; (n<m); //實作2
if(myTest.test(2, 10))
System.out.println("2小於10");
//...
myTest = (n, m) ->; (n if(myTest.test(4, -4))
System.out.println("4和-4的絕對值相等。");
// ...

參考變數的清晰度

使用不同的引用變數(例如 isFactor、lessThan、absEqual)可以幫助您清楚地識別每個變數代表哪個 lambda 表達式。

多參數規格

lambda 表達式中的多個參數在 lambda 運算子左側的括號列表中以逗號分隔。
例: (n, d) -> (n % d) == 0.

在 lambda 表達式中使用不同型別

函數式介面的抽象方法中,參數或傳回的型別沒有限制。
像 String 這樣的非原始資料類型可以在 lambda 表達式中使用。

使用字串進行測試的範例

函數式介面可用來測試特定的字串相關條件,例如檢查一個字串是否包含在另一個字串中。

// 測試兩個字串的函數介面。
介面 StringTest {
布林測試(String aStr, String bStr);
}
類別 LambdaDemo3 {
public static void main(String args[])
{
// 這個 lambda 表達式確定字串是否
// 另一個的一部分。
StringTest isIn = (a, b) ->; a.indexOf(b) != -1;
String str = "這是一個測試";
System.out.println("測試字串:" str);
if(isIn.test(str, "is a"))
System.out.println("找到''是'。");
其他
System.out.println("'是一個'未找到。");
if(isIn.test(str, "xyz"))
System.out.println("'xyz' 找到");
其他
System.out.println("未找到'xyz'");
}
}

輸出:
測試字串:這是一個測試
找到“是”。
找不到“xyz”

StringTest 函數介面

定義一個傳回布林值的抽象方法 test(String aStr, String bStr)。

使用 lambda 表達式實現

lambda 表達式 (a, b) -> a.indexOf(b) != -1 檢查字串 (b) 是否包含在另一個字串 (a) 中。

參數中的型別推論

參數a和b被推論為String類型,允許使用String類別的方法,例如indexOf。

程式測試字串“This is a test”,看看它是否包含子字串“is a”和“xyz”,並相應地列印結果。

以上是實際應用中的 Lambda 表達式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:功能介面下一篇:功能介面