【问题标题】:Difference between java 9 OR and java 8 orElseGetjava 9 OR 和 java 8 orElseGet 的区别
【发布时间】:2018-06-09 14:56:22
【问题描述】:

Java9 为 Optional 添加了.or 方法。现有的 .orElseGet 有何不同?

checkUserInMemory(userId).or(() -> checkUserInDB(userId));

【问题讨论】:

    标签: java java-8 optional java-9


    【解决方案1】:

    主要是两者的返回类型不同。

    Optional.orElseGet

    • orElseGet 的调用返回对象T 本身。

    • 如果 不存在任何值且提供函数为 null

      ,则抛出 NullPointerException
    • 用例:根据提供的函数确定性地获取值。

    Optional.or

    【讨论】:

      【解决方案2】:

      Optional.orElse 将返回一个Object,而Optional.or 将返回另一个Optional

      【讨论】:

      • 这没有错,但它没有回答 OP 的问题。
      【解决方案3】:

      除了Optional::orElseGet供应商返回TOptional::or供应商返回Optional<T>这一事实之外,两者之间另一个更重要的区别是更新(更棒)Optional::or可组合(在我的 LinkedIn 帖子 here 中进一步解释)而 Optional::orElseGet 不是。

      【讨论】:

      • 当链接到您自己的网站或内容(或您附属的内容)时,您must disclose your affiliation in the answer 以免被视为垃圾邮件。根据 Stack Exchange 政策,在您的用户名中包含与 URL 相同的文本或在您的个人资料中提及它不被视为充分披露。
      猜你喜欢
      • 2017-10-26
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多