java - 何时使用 Optional.orElse() 而不是 Optional.orElseGet()

标签 java java-8 option-type

<分区>

我已阅读此 question 的答案关于 Optional.orElse()Optional.orElseGet() 的区别。

似乎 orElseGet() 总是比 orElse() 更有效,因为惰性评估,即使在对非常简单的示例进行基准测试时也明显可见(参见第 4 部分):https://www.baeldung.com/java-optional-or-else-vs-or-else-get

那么,是否存在使用 orElse 而不是 orElseGet 更好的用例?

最佳答案

  1. 在大多数情况下,您在使用 orElse 时输入较少, 因为它比 orElseGet 短并且,比较他们的签名:

orElse(T other)
orElseGet(Supplier<? extends T> other)

一个Supplier<? extends T> other很可能长于 T other .如果性能不是那么重要,您可以选择少打字。程序员的努力也很重要:-) 例如,比较:

orElseGet(() -> 1)
orElse(1)
  1. 正如您的链接所提到的:

by default, it makes more sense to use orElseGet() every time unless the default object is already constructed and accessible directly.

关于java - 何时使用 Optional.orElse() 而不是 Optional.orElseGet(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54102390/

相关文章:

java - 无法在 IntStream 上应用 Collectors.groupingBy

java - 在 Android 中的模式上使用 OR

java - 无法以编程方式创建 AZURE VM

JavaFX VGrow TabPane 内容更改

java - 当他们说 StringBuffer 类是同步的时,到底是什么意思?该类的所有方法都声明为同步的吗?

java - 当构造函数作为方法引用出现在流中时,如何模拟它?

java - AnnotatedTypes 是否有类似 TypeToken 的东西

typeerror - elm-lang 错误 `(==) is expecting the right side to be a:`

java - 如何在 java 中使用 Optional 检查是否为 null 以及是否具有特定值?

java - Guice 中的可选 Scoped 注入(inject)