【问题标题】:Three possible java8 Optional values - how do I cleanly return whichever is present? [duplicate]三个可能的 java8 可选值 - 我如何干净地返回存在的值? [复制]
【发布时间】:2016-04-09 07:43:49
【问题描述】:

我有三个 java8 选项,并且想要返回实际存在的任何一个以首选顺序。似乎应该有一种简单的方法来链接它们:

return optionalA.orElseIfPresent(optionalB).orElseIfPresent(optionalC);

如果三个都是空的,那么应该返回一个Optional.empty()

现有的 orElse 和 orElseGet 并不能真正完成任务 - 它们必须返回一个实际值,因此剩余的后备选项本身不可能是可选的。

在最坏的情况下,我可以有很长的 ifPresent() 检查列表,但似乎有更好的方法来解决它?

【问题讨论】:

    标签: java-8 optional


    【解决方案1】:
    return Stream.of(optional1, optional2, optional3)
                 .filter(Optional::isPresent)
                 .map(Optional::get)
                 .findFirst();
    

    【讨论】:

      【解决方案2】:

      我喜欢 JB Nizet 的回答(也赞成)。或者,仅使用 Optional(无论出于何种原因):

      Optional.ofNullable(
          optionalA.orElse(
              optionalB.orElse(
                  optionalC.orElse(null))
              )
          );
      

      这属于缩进/括号疯狂,我个人不喜欢。

      【讨论】:

      • 流的答案可能“更漂亮”,但这种解决方案更简单、更透明(顺便说一句,效率更高。)
      猜你喜欢
      • 1970-01-01
      • 2012-03-19
      • 2013-06-10
      • 1970-01-01
      • 2018-08-16
      • 2018-12-24
      • 2023-03-26
      • 2018-08-01
      • 2013-06-10
      相关资源
      最近更新 更多