2 回答

TA貢獻1943條經驗 獲得超7個贊
如果您的條件只是基于.equals()一個鍵和值,就像您在問題中顯示的那樣,您可以只使用map.get()一個簡單的if語句:
Response result = responses.get("foo");
if (result == null || result.equals(bar))
result = responses.get("some other key");
所以沒有必要使用任何其他東西。
或者正如 Holger 所建議的那樣,您也可以使用map.getOrDefault():
Response result = responses.getOrDefault("foo", bar);
if(result.equals(bar))
result = responses.get("some other key");

TA貢獻1853條經驗 獲得超9個贊
這可能是您需要使用的Optional:
Response response = Optional
.ofNullable(responses.get("foo")) // find the "foo" Response
.filter(value -> !"bar".equals(value)) // except if is null or "bar"
.orElse(responses.get("other")); // then find the "other" response (then null)
幾點見解:
有代碼:
if (key.equals("foo") && !value.equals("bar")) { res1 = value; } else if (key.equals("some other key")) { res2 = value; }
盡管每個鍵可能只出現一次,但在循環內部,每次迭代都不必要地檢查這兩個條件??紤]在和被設置的
break
情況下的用法。res1
res2
這java流在這里不是勝利。請注意,如果密鑰不存在,
entry.getKey().equals("foo")
則應縮短為map.get("foo")
which 返回。null
這就是為什么我將此行為與Optional
.
添加回答
舉報