相关疑难解决方法(0)

`Optional.orElse()`和`Optional.orElseGet()`之间的区别

我试图理解Optional<T>.orElse()Optional<T>.orElseGet()方法之间的区别.

orElse()方法的描述是"如果存在则返回值,否则返回其他值".

虽然,该orElseGet()方法的描述是"如果存在返回值,否则调用other并返回该调用的结果".

orElseGet()方法采用供应商功能接口,基本上不接受任何参数和返回T.

你需要在哪种情况下使用orElseGet()?如果你有一个方法,你T myDefault()为什么不这样做optional.orElse(myDefault())而不是optional.orElseGet(() -> myDefault())

似乎没有orElseGet()将lambda表达式的执行推迟到以后的某个时间或什么的,所以有什么意义呢?(我本以为如果它返回一个更安全Optional<T>的东西会更有用,它get()永远不会抛出一个NoSuchElementException并且isPresent()总是返回真实......但显然它不是,它只是返回T就像orElse()).

我还缺少其他一些差异吗?

java optional java-8

183
推荐指数
6
解决办法
10万
查看次数

当我需要在Optional.orElse()上使用Optional.orElseGet()时

我需要对此进行清楚的解释,即使我读到这个关于差异的链接但没有明确的清晰度.所以任何人都可以用代码向我解释这一点.

java optional java-8

12
推荐指数
2
解决办法
2万
查看次数

标签 统计

java ×2

java-8 ×2

optional ×2