java 如何让`Map::get`返回找到的值的`Optional`或`Optional.empty()`

pu3pd22g  于 2023-05-21  发布在  Java
关注(0)|答案(4)|浏览(144)

我正在努力做到这一点:

return Optional.of(myMap.getOrDefault(myKey, null));

实际上,我想要的是,如果找到了,返回一个Optional.of(foundVal),否则返回Optional.empty()。我不相信Optional.of(null)等于这个。我想做的事情是什么语法?
也就是说,我如何才能让Mapget返回正确的Optional

0wi1tuuw

0wi1tuuw1#

为什么不干脆:

return Optional.ofNullable(myMap.get(myKey));

JavaDocs

p3rjfoxz

p3rjfoxz2#

这个

Optional.of(myMap.getOrDefault(myKey, null));

或者真的

Optional.of(null);

会因为NullPointerException而失败正如javadoc所述
投掷:

NullPointerException-如果value为空

Optional#ofNullable存在,当你不知道你传递给它的值是否是null

参数

value-要描述的可能为空的值
由于Map#get(Object)在没有给定键的条目时已经返回null

返回

指定键Map到的值,或者null(如果此Map不包含键的Map)
你不需要使用getOrDefaultnull作为默认值。您可以直接使用

Optional.ofNullable(myMap.get(myKey));
pjngdqdw

pjngdqdw3#

如果Map包含空值,则Optional.ofNullable(...)解决方案将不起作用。你需要做一些类似的事情:

myMap.containsKey(myKey) ? Optional.of(myMap.get(myKey)) : Optional.empty();

看两遍Map很烦人,但似乎没有更好的办法。

bpsygsoo

bpsygsoo4#

功能和绝对太长的解决方案:

myMap.entrySet().stream()
  .filter(it -> it.getKey().equals(myKey))
  .findFirst()
  .map(Map.Entry::getValue);

相关问题