我正在努力做到这一点:
return Optional.of(myMap.getOrDefault(myKey, null));
实际上,我想要的是,如果找到了,返回一个Optional.of(foundVal),否则返回Optional.empty()。我不相信Optional.of(null)等于这个。我想做的事情是什么语法?也就是说,我如何才能让Mapget返回正确的Optional?
Optional.of(foundVal)
Optional.empty()
Optional.of(null)
get
Optional
0wi1tuuw1#
为什么不干脆:
return Optional.ofNullable(myMap.get(myKey));
JavaDocs
p3rjfoxz2#
这个
Optional.of(myMap.getOrDefault(myKey, null));
或者真的
Optional.of(null);
会因为NullPointerException而失败正如javadoc所述投掷:
NullPointerException
NullPointerException-如果value为空
value
Optional#ofNullable存在,当你不知道你传递给它的值是否是null:
Optional#ofNullable
null
参数:
value-要描述的可能为空的值由于Map#get(Object)在没有给定键的条目时已经返回null
Map#get(Object)
返回:
指定键Map到的值,或者null(如果此Map不包含键的Map)你不需要使用getOrDefault和null作为默认值。您可以直接使用
getOrDefault
Optional.ofNullable(myMap.get(myKey));
pjngdqdw3#
如果Map包含空值,则Optional.ofNullable(...)解决方案将不起作用。你需要做一些类似的事情:
Optional.ofNullable(...)
myMap.containsKey(myKey) ? Optional.of(myMap.get(myKey)) : Optional.empty();
看两遍Map很烦人,但似乎没有更好的办法。
bpsygsoo4#
功能和绝对太长的解决方案:
myMap.entrySet().stream() .filter(it -> it.getKey().equals(myKey)) .findFirst() .map(Map.Entry::getValue);
4条答案
按热度按时间0wi1tuuw1#
为什么不干脆:
JavaDocs
p3rjfoxz2#
这个
或者真的
会因为
NullPointerException
而失败正如javadoc所述投掷:
NullPointerException-如果
value
为空Optional#ofNullable
存在,当你不知道你传递给它的值是否是null
:参数:
value
-要描述的可能为空的值由于
Map#get(Object)
在没有给定键的条目时已经返回null
返回:
指定键Map到的值,或者
null
(如果此Map不包含键的Map)你不需要使用
getOrDefault
和null
作为默认值。您可以直接使用pjngdqdw3#
如果Map包含空值,则
Optional.ofNullable(...)
解决方案将不起作用。你需要做一些类似的事情:看两遍Map很烦人,但似乎没有更好的办法。
bpsygsoo4#
功能和绝对太长的解决方案: