Java9已将.or
方法添加到Optional中。现有.orElseGet
的情况有何不同?
checkUserInMemory(userId).or(() -> checkUserInDB(userId));
答案 0 :(得分:9)
两者的返回类型主要有所不同。
对orElseGet
的调用会返回对象T
本身。
如果 没有值且提供功能为NullPointerException
null
使用案例:根据提供的函数确定性地获取值。
Optional.or
返回描述该值的Optional
,否则返回由供应函数生成的Optional
如果 提供功能为NullPointerException
,或者 提供功能产生{null
,则会引发null
{1}}结果。
用例:根据提供的函数的结果链接一系列Optional
。样品 -
How do I concisely write a || b where a and b are Optional values?
答案 1 :(得分:9)
Optional.orElse
将返回Object
,而Optional.or
将返回另一个Optional
。