一些將 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中文網其他相關文章!

Java在企業級應用中被廣泛使用是因為其平台獨立性。 1)平台獨立性通過Java虛擬機(JVM)實現,使代碼可在任何支持Java的平台上運行。 2)它簡化了跨平台部署和開發流程,提供了更大的靈活性和擴展性。 3)然而,需注意性能差異和第三方庫兼容性,並採用最佳實踐如使用純Java代碼和跨平台測試。

JavaplaysigantroleiniotduetoitsplatFormentence.1)itallowscodeTobewrittenOnCeandrunonVariousDevices.2)Java'secosystemprovidesuseusefidesusefidesulylibrariesforiot.3)

ThesolutiontohandlefilepathsacrossWindowsandLinuxinJavaistousePaths.get()fromthejava.nio.filepackage.1)UsePaths.get()withSystem.getProperty("user.dir")andtherelativepathtoconstructthefilepath.2)ConverttheresultingPathobjecttoaFileobjectifne

Java'splatFormIndenceistificantBecapeitAllowSitallowsDevelostWriTecoDeonCeandRunitonAnyPlatFormwithAjvm.this“ writeonce,runanywhere”(era)櫥櫃櫥櫃:1)交叉plat formcomplibility cross-platformcombiblesible,enablingDeploymentMentMentMentMentAcrAptAprospOspOspOssCrossDifferentoSswithOssuse; 2)

Java適合開發跨服務器web應用。 1)Java的“一次編寫,到處運行”哲學使其代碼可在任何支持JVM的平台上運行。 2)Java擁有豐富的生態系統,包括Spring和Hibernate等工具,簡化開發過程。 3)Java在性能和安全性方面表現出色,提供高效的內存管理和強大的安全保障。

JVM通過字節碼解釋、平台無關的API和動態類加載實現Java的WORA特性:1.字節碼被解釋為機器碼,確保跨平台運行;2.標準API抽像操作系統差異;3.類在運行時動態加載,保證一致性。

Java的最新版本通過JVM優化、標準庫改進和第三方庫支持有效解決平台特定問題。 1)JVM優化,如Java11的ZGC提升了垃圾回收性能。 2)標準庫改進,如Java9的模塊系統減少平台相關問題。 3)第三方庫提供平台優化版本,如OpenCV。

JVM的字節碼驗證過程包括四個關鍵步驟:1)檢查類文件格式是否符合規範,2)驗證字節碼指令的有效性和正確性,3)進行數據流分析確保類型安全,4)平衡驗證的徹底性與性能。通過這些步驟,JVM確保只有安全、正確的字節碼被執行,從而保護程序的完整性和安全性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具