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

And*_*ong 7 java optional java-8

我正在尝试这样做:

return Optional.of(myMap.getOrDefault(myKey, null));
Run Code Online (Sandbox Code Playgroud)

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

也就是说,我怎样才能让地图get返回正确的地图Optional

Eug*_*ene 11

为什么不简单:

return Optional.ofNullable(myMap.get(myKey));
Run Code Online (Sandbox Code Playgroud)

的JavaDoc

  • 呃现在我知道那是为了什么.对不起,这些东西并没有真正跳到新的Java用户身上.谢谢. (3认同)

Sav*_*ior 10

这个

Optional.of(myMap.getOrDefault(myKey, null));
Run Code Online (Sandbox Code Playgroud)

或者真的

Optional.of(null);
Run Code Online (Sandbox Code Playgroud)

会失败NullPointerException。正如javadoc所述

抛出:
NullPointerException - 如果value为 null

Optional#ofNullable当您不知道传递给它的值是否为null

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

并且因为在没有给定键的条目时Map#get(Object)已经返回null

返回
指定键映射到的值,或者null如果此映射不包含该键的映射

你不需要使用getOrDefault一个null默认值。你可以直接使用

Optional.ofNullable(myMap.get(myKey));
Run Code Online (Sandbox Code Playgroud)