【发布时间】:2018-06-09 14:56:22
【问题描述】:
Java9 为 Optional 添加了.or 方法。现有的 .orElseGet 有何不同?
checkUserInMemory(userId).or(() -> checkUserInDB(userId));
【问题讨论】:
标签: java java-8 optional java-9
Java9 为 Optional 添加了.or 方法。现有的 .orElseGet 有何不同?
checkUserInMemory(userId).or(() -> checkUserInDB(userId));
【问题讨论】:
标签: java java-8 optional java-9
主要是两者的返回类型不同。
对orElseGet 的调用返回对象T 本身。
如果 不存在任何值且提供函数为 null
NullPointerException
用例:根据提供的函数确定性地获取值。
Optional.or 返回描述值的 Optional,否则返回由提供函数生成的 Optional
null或者如果供应函数产生null结果,抛出NullPointerException。
用例:根据提供的函数的结果链接一系列Optionals。样本 -
How do I concisely write a || b where a and b are Optional values?
【讨论】:
Optional.orElse 将返回一个Object,而Optional.or 将返回另一个Optional。
【讨论】:
除了Optional::orElseGet供应商返回T而Optional::or供应商返回Optional<T>这一事实之外,两者之间另一个更重要的区别是更新(更棒)Optional::or是可组合(在我的 LinkedIn 帖子 here 中进一步解释)而 Optional::orElseGet 不是。
【讨论】: