【问题标题】:Creating an Object from Optional<Object>从 Optional<Object> 创建一个对象
【发布时间】:2017-03-23 13:14:55
【问题描述】:

所以我创建了一个来自 List 的流,但我在将其转换为 &lt;ObjectType&gt;, 时遇到了一些问题,这是我尝试过的:

ObjectType sco = getList().stream()
                          .filter(p -> p.getValue() == value)
                          .findFirst(); //also tried .orElse(null);

有没有人好心地建议我哪里出错了? (如果之前有人问过这个问题,我很抱歉,但我找不到关于这个特定主题的讨论(或者不知道要搜索的正确术语))

提前致谢!

【问题讨论】:

  • 你尝试.orElse(null)时发生了什么?
  • 好吧,我在没有 findFirst() 的情况下尝试了它,那是我的失败......如果你像 @Brian Angew 那样使用 .findFirst().orElse(null) 建议它完美地工作。

标签: java java-stream optional


【解决方案1】:

findFirst() 给你一个Optional,然后你必须决定如果它不存在怎么办。所以findFirst().orElse(null) 应该给你对象如果它不存在则返回 null

可以Optional 上执行.get(),但这可能被视为不好的做法,因为如果Optional 没有内容,get() 将抛出异常。您通常应该断言 Optional 的存在/不存在并决定在每种情况下要做什么(这就是它存在的原因 - 这样您就知道某些东西是真正的可选并且您必须确定要做什么)

如果您想对存在的对象执行某项操作,并且不想对absence 执行任何操作,则可以调用.ifPresent() 并提供一个 lambda 作为参数。将使用包含的对象(如果存在)调用它。

从 Java 9 开始,进一步的解决方案是使用 Optional.ifPresentOrElse()

【讨论】:

    【解决方案2】:

    我想你可能正在寻找findFirst().or Else(null)findFirst() 将返回一个 Optional - 如果蒸汽是空的,则为空。

    除非我误解了你的评论。你有没有试过这个,或者你试过orElse(null)而不用findFirst()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 2013-01-26
      相关资源
      最近更新 更多