[英]How to make `Map::get` return either an `Optional` of the found value or `Optional.empty()`
我正在嘗試這樣做:
return Optional.of(myMap.getOrDefault(myKey, null));
真的,我想要的是如果找到則返回Optional.of(foundVal)
,否則返回Optional.empty()
。 我不相信Optional.of(null)
等同於那個。 我想要做什么語法?
也就是說,我怎樣才能讓 map get
返回一個正確的Optional
?
這個
Optional.of(myMap.getOrDefault(myKey, null));
或者真的
Optional.of(null);
會因NullPointerException
失敗。 正如javadoc所述
拋出:
NullPointerException - 如果value
null
Optional#ofNullable
當您不知道傳遞給它的值是否為null
存在:
參數:
value
- 要描述的可能為空的值
並且由於Map#get(Object)
在沒有給定鍵的條目時已經返回null
回報:
指定鍵映射到的值,如果此映射不包含該鍵的映射,則為null
您不需要使用帶有null
值的getOrDefault
作為默認值。 你可以直接使用
Optional.ofNullable(myMap.get(myKey));
功能性且絕對太長的解決方案:
myMap.entrySet().stream()
.filter(it -> it.getKey().equals(myKey))
.findFirst()
.map(Map.Entry::getValue);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.