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
如果 供给函数是 null
或 NullPointerException
抛出 NullPointerException
=41=]供给函数产生null
结果。
用例:根据所提供函数的结果链接一系列 Optional
。样本 -
如何简明扼要地写一个|| b 其中 a 和 b 是可选值?
Optional.orElse
将 return 一个 Object
,而 Optional.or
将 return 另一个 Optional
.
除了 Optional::orElseGet
供应商 returns T
而 Optional::or
供应商 returns Optional<T>
之外,另一个更重要的区别是二是更新的(更棒的)Optional::or
是 可组合的 (在我的 LinkedIn post here 中进一步解释)而 Optional::orElseGet
不是't.
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
如果 供给函数是
null
或NullPointerException
抛出NullPointerException
=41=]供给函数产生null
结果。用例:根据所提供函数的结果链接一系列
Optional
。样本 - 如何简明扼要地写一个|| b 其中 a 和 b 是可选值?
Optional.orElse
将 return 一个 Object
,而 Optional.or
将 return 另一个 Optional
.
除了 Optional::orElseGet
供应商 returns T
而 Optional::or
供应商 returns Optional<T>
之外,另一个更重要的区别是二是更新的(更棒的)Optional::or
是 可组合的 (在我的 LinkedIn post here 中进一步解释)而 Optional::orElseGet
不是't.