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

时间:2018-11-01 20:10:44

标签: java java-8 optional

我正在尝试这样做:

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

真的,我要返回的是一个Optional.of(foundVal),否则返回Optional.empty()。我不认为Optional.of(null)等同于此。我想做什么语法?

也就是说,如何获取地图get以返回正确的Optional

3 个答案:

答案 0 :(得分:9)

为什么不简单:

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

JavaDocs

答案 1 :(得分:4)

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

或者真的

Optional.of(null);

将失败,并显示NullPointerException。根据{{​​3}}的声明

  

投掷:
   NullPointerException -如果value为空

javadoc存在,当您不知道要传递给它的值是否为null时:

  

参数
  value-描述的可能为空的值

并且由于Optional#ofNullable在没有给定键的条目时已经返回null

  

返回
  指定键所映射的值;如果是,则null   该地图不包含该键的映射

您无需将getOrDefault与默认值null一起使用。您可以直接使用

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

答案 2 :(得分:-1)

实用且肯定太长的解决方案:

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