【问题标题】:Finding a more functional approach using Java Optional?使用 Java Optional 寻找更实用的方法?
【发布时间】:2017-04-27 18:01:01
【问题描述】:

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

Can be replaced by a singular expression in functional style.

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

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

我看了一点here,但找不到一种用法,或者至少在这里找不到适合我的情况。我对 lambda 功能还很陌生。

【问题讨论】:

    标签: java intellij-idea java-8


    【解决方案1】:

    How about:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        就我而言,orElse() 符合我的需求。我不需要做额外的反序列化。

        而不是 isPresent() 结合 get() 确实可以解决问题……

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

        你可以使用

        return maybeBytes.orElse(new Entry());
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-02-02
          • 1970-01-01
          • 1970-01-01
          • 2021-10-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多