使用Java Optional查找更具功能性的方法?

jac*_*cob 3 java intellij-idea java-8

我正在尝试尽可能多地使用Optional来进行正常的空值检查; 我的IDE(IntelliJ)遇到了一个建议:

Can be replaced by a singular expression in functional style.
Run Code Online (Sandbox Code Playgroud)

这是有问题的代码,有问题的行:

Entry entry = maybeBytes.isPresent() ? Entry.deserialize(maybeBytes.get()) : new Entry();
Run Code Online (Sandbox Code Playgroud)

我在这里看了一下,但找不到用法或至少看到一个适合我的情况.我对lambda功能很新.

Aas*_*set 8

怎么样:

Entry entry = maybeBytes.map(Entry::deserialize).orElseGet(Entry::new);
Run Code Online (Sandbox Code Playgroud)

如果maybeBytes包含一个值,它将被传递给你提供给的函数map(),你将得到一个Optional<Entry>结果(如果maybeBytes是空的,你将得到一个空的Optional<Entry>).orElseGet()会给你Optional<Entry>if的非空的内容,否则,它会给你评估你传递给它的函数的结果(在这种情况下,是构造函数Entry).