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

时间:2017-04-27 18:01:02

标签: java intellij-idea java-8

我尽可能地尝试使用Optional,而不是正常的空值检查;我的IDE(IntelliJ)遇到了一个建议:

Can be replaced by a singular expression in functional style.

以下是有问题的代码,有问题的一行:

Entry entry = maybeBytes.isPresent() ? Entry.deserialize(maybeBytes.get()) : new Entry();

我看上去有点here,但无法找到用法,或至少看到一个适合我的情况。我对lambda功能很陌生。

3 个答案:

答案 0 :(得分:8)

How about

Entry entry = maybeBytes.map(Entry::deserialize).orElseGet(Entry::new);

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

答案 1 :(得分:2)

当您看到这些建议时按Alt + Enter将会应用它们,您将自己看到结果:)

答案 2 :(得分:0)

在我的情况下,orElse()符合我的需要。我不需要做额外的反序列化。

而不是isPresent()与get()相结合当然可以解决问题......

return maybeBytes.isPresent() ? maybeBytes.get() : new Entry();

你可以使用

return maybeBytes.orElse(new Entry());