假設你有一籃食物:
List<food> basket = List.of( new Food("Apple", FRUIT), new Food("Banana", FRUIT), new Food("Carrot", VEGETABLE), new Food("Orange", FRUIT), ); </food>
並且要求僅接受僅裝滿水果的籃子。為了滿足這個要求,您決定實作一個 for 迴圈:
private boolean containtsOnlyFruits(List<food> basket) { for (Food food : basket) { if (food.getFoodType() != FRUIT) { return false; } } return true; } </food>
然後,您記得您一直在學習 Java Lambda 和更實用的方法,因此您決定在 forEach lambda 中編寫相同的內容:
private boolean containtsOnlyFruits(List<food> basket) { basket.forEach(food -> { if (food.getFoodType() != FRUIT) { return false; } }); return true; } </food>
只是遇到一個錯誤:
意外的回傳值
這是為什麼?
lambda 只不過是個函數。在這種情況下,是一個匿名函數,或者換句話說,是一個沒有名稱的函數。就像任何其他函數一樣,lambda 可以接收參數並期望會傳回一些內容。
當你嘗試從 forEach lambda 返回 false 時,你實際上是在嘗試退出這個匿名函數並輸出一個布林值。但是,forEach 函數預計不會傳回任何結果。這根本不是這個功能的實現方式。
事實上,如果你看一下 forEach 函數的實現,你會發現它接受一個 Consumer:
default void forEach(Consumer super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } }
消費者是一個接口,表示接受單一輸入參數且不回傳結果的操作。在此實作中,您可以看到在底層,forEach 函數使用 foreach 循環,執行給定的操作並且不傳回任何內容。
因此,為了滿足函數式方法中的操作,我們需要找到另一個 lambda。這裡有一個很好的候選人:allMatch。
使用 allMatch lambda,我們可以檢查籃子中的所有元素是否都是水果:
private boolean onlyFruits(List<food> basket) { return basket.stream().allMatch(food -> food.getFoodType() == FRUIT); } </food>
如果是這樣的話,我們的 lambda 將會回傳 true。如果我們看一下 allMatch 的內部:
boolean allMatch(Predicate super T> predicate);
我們將看到 allMatch 函數需要一個謂詞。
謂詞是一個函數式接口,就像消費者一樣,但它的工作方式有點不同。 Consumer 表示接受單一輸入參數且不傳回結果的操作,而 Predicate 表示一個參數的謂詞(布林值函數),用於測試物件的條件並傳回布林值(true 或 false) ).
還有其他非常重要的功能介面。你能告訴我它們是什麼以及它們如何運作嗎?
保持好奇!
貢獻
寫作需要時間和精力。 我喜歡寫作和分享知識,但我也有帳單要付。
如果您喜歡我的作品,請考慮透過「買杯咖啡」捐款:https://www.buymeacoffee.com/RaphaelDeLio
或寄給我比特幣:1HjG7pmghg3Z8RATH4aiUWr156BGafJ6Zw
以上是為什麼我的 forEach lambda 不允許我使用 Java 中的 return 語句退出函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Java在不同操作系統上的表現存在細微差異。 1)JVM實現不同,如HotSpot、OpenJDK,影響性能和垃圾回收。 2)文件系統結構和路徑分隔符不同,需使用Java標準庫處理。 3)網絡協議實現差異影響網絡性能。 4)GUI組件外觀和行為在不同系統上有別。通過使用標準庫和虛擬機測試,可減少這些差異的影響,確保Java程序穩定運行。

javaoffersrobustobject-IentiendedProgrammming(OOP)和Top-Notchsecurityfeatures.1)OopinjavainCludesClasses,對象,繼承,多態性,和列出,andeclingfleximaintainablesys.ss.2)SecurityFeateTuersLudEtersludEterMachine(

JavaScriptandJavahavedistinctstrengths:JavaScriptexcelsindynamictypingandasynchronousprogramming,whileJavaisrobustwithstrongOOPandtyping.1)JavaScript'sdynamicnatureallowsforrapiddevelopmentandprototyping,withasync/awaitfornon-blockingI/O.2)Java'sOOPf

JAVAACHIEVESPLATFORMINDEPENTENCETHROUGHJAVAVIRTAILMACHINE(JVM)和BYTECODE.1)THEJVMINTERPRETSBBYTECODE,允許theingthesmecodetorunonanyanyanyanyplatformwithajvm.2)

java'splatformendependecemeansapplicationscanrunonanyplatformwithajvm,使“ Writeonce,runanywhere”。

JVM'SperformanceIsCompetitiveWithOtherRuntimes,operingabalanceOfspeed,安全性和生產性。 1)JVMUSESJITCOMPILATIONFORDYNAMICOPTIMIZAIZATIONS.2)c提供NativePernativePerformanceButlanceButlactsjvm'ssafetyFeatures.3)

JavaachievesPlatFormIndependencEthroughTheJavavIrtualMachine(JVM),允許CodeTorunonAnyPlatFormWithAjvm.1)codeisscompiledIntobytecode,notmachine-specificodificcode.2)bytecodeisisteredbytheybytheybytheybythejvm,enablingcross-platerssectectectectectross-eenablingcrossectectectectectection.2)

TheJVMisanabstractcomputingmachinecrucialforrunningJavaprogramsduetoitsplatform-independentarchitecture.Itincludes:1)ClassLoaderforloadingclasses,2)RuntimeDataAreafordatastorage,3)ExecutionEnginewithInterpreter,JITCompiler,andGarbageCollectorforbytec


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

WebStorm Mac版
好用的JavaScript開發工具

Dreamweaver CS6
視覺化網頁開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。