我尽可能地尝试使用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功能很陌生。
答案 0 :(得分:8)
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());