我是 Java 新手,我不明白為什么 IDE 在 forEach 中說“意外的回傳值”,我通過 If 陳述句宣告布林值是真還是假。我的目標是檢查“States”HashMap 中是否有一個物件已經使用了我想設定為新狀態的名稱。(HashMap 的鍵是一個名為 IdentifierOfState 的字串,值是我的 State 物件,其中包含其名稱等變數。)提前感謝您的幫助!
public boolean isStateNameClaimed(String NameOfState)
{
States.forEach((IdentifierOfState, ValueOfState) ->
{
if (ValueOfState.getNameOfState().equalsIgnoreCase(NameOfState)) {return true;}
else {return false;}
});
return false;
}
uj5u.com熱心網友回復:
問題是您試圖在錯誤的地方回傳結果。該{return true;}和{return true;}是一個lambda,所以他們試圖回傳結果為拉姆達。但是該 lambda 的推斷型別簽名不允許回傳任何值。
如果您的意圖是這些 return 陳述句應該從 回傳結果isStateNameClaimed,那么更好的解決方案是僅使用for回圈來迭代 的元素States。
您的 Java 代碼包含許多嚴重的 Java 風格違規,這無濟于事。變數名不應以大寫字母開頭。它會混淆……然后惹惱……其他閱讀您代碼的人。
你可能會說:“不,我不需要遵守規則,因為沒有人會閱讀我的代碼”。但是您要求 >>us<< 閱讀您的代碼。
我是 Java 新手...
......所以現在是學習正確做這件事的時候了。Java 風格對閱讀你的代碼的人很重要。
這就是我用經典 Java 撰寫的方式:
public boolean isStateNameClaimed(String name) {
for (State v: states.values()) {
if (v.getNameOfState().equalsIgnoreCase(name)) {
return true;
} else {
return false;
}
}
return false;
}
或者使用流:
public boolean isStateNameClaimed(String name) {
return states.values().stream().anyMatch(
(v) -> v.getNameOfState().equalsIgnoreCase(name));
}
實際上......我只是注意到這兩種解決方案并不等價。根據您對您嘗試做的事情的描述,這可能意味著第一個和您最初的嘗試在演算法上是不正確的。
uj5u.com熱心網友回復:
forEach 將為每個元素呼叫一個給定的可呼叫函式。我們不能有該函式的回傳值。
嘗試使用“過濾器”或將結果分配給區域變數。
在java中從lambda forEach()回傳
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/373035.html
上一篇:R中的for回圈中的if、elseif和else語法
下一篇:每次迭代更新串列
