最佳答案
我试图理解Optional<T>.orElse()和Optional<T>.orElseGet()方法之间的区别。
orElse()方法的描述是如果存在则返回值,否则返回other。
而orElseGet()方法的描述是如果存在则返回值,否则调用other并返回该调用的结果。
orElseGet()方法接受一个Supplier函数接口,该接口本质上不接受任何参数并返回T。
在哪种情况下需要使用orElseGet()?如果你有一个方法T myDefault(),为什么不直接使用optional.orElse(myDefault())而不是optional.orElseGet(() -> myDefault())呢?
orElseGet()似乎并没有将lambda表达式的执行推迟到以后的某个时间之类的,那么它的意义是什么呢?(我认为如果它返回一个更安全的Optional<T>,其get()永远不会抛出NoSuchElementException,而isPresent()总是返回true,那么它会更有用……但显然不是,它只是像orElse()一样返回T)。
还有其他的不同吗?