java 9 OR 和 java 8 orElseGet 的区别

Difference between java 9 OR and java 8 orElseGet

Java9 已将 .or 方法添加到可选。现有 .orElseGet 有何不同?

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

主要是两者的return类型不同。

Optional.orElseGet

  • orElseGet return 对象 T 本身的调用。

  • 如果 不存在任何值并且提供的函数是 null[=59=,则抛出 NullPointerException ]

  • 用例:根据提供的函数确定性地获取值。

Optional.or

  • Optional.or return 是描述值的 Optional ,否则 return 是供应函数产生的 Optional

  • 如果 供给函数是 nullNullPointerException 抛出 NullPointerException =41=]供给函数产生null结果。

  • 用例:根据所提供函数的结果链接一系列 Optional。样本 - 如何简明扼要地写一个|| b 其中 a 和 b 是可选值?

Optional.orElse 将 return 一个 Object,而 Optional.or 将 return 另一个 Optional.

除了 Optional::orElseGet 供应商 returns TOptional::or 供应商 returns Optional<T> 之外,另一个更重要的区别是二是更新的(更棒的)Optional::or 可组合的 (在我的 LinkedIn post here 中进一步解释)而 Optional::orElseGet 不是't.