java 9 OR和java 8 orElseGet之间的区别

时间:2017-12-29 05:46:18

标签: java java-8 optional java-9

Java9已将.or方法添加到Optional中。现有.orElseGet的情况有何不同?

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

2 个答案:

答案 0 :(得分:9)

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

Optional.orElseGet

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

  • 如果 没有值且提供功能为NullPointerException

  • ,则会引发null
  • 使用案例:根据提供的函数确定性地获取值。

Optional.or

  • 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