首页 >Java >java教程 >在 Java 中什么时候应该使用Optional.orElseGet()而不是Optional.orElse()?

在 Java 中什么时候应该使用Optional.orElseGet()而不是Optional.orElse()?

Barbara Streisand
Barbara Streisand原创
2024-10-26 09:27:30732浏览

When should I use Optional.orElseGet() instead of Optional.orElse() in Java?

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

在Java中,Optional类提供了像orElse( ) 和 orElseGet() 用于处理潜在的缺失值或空值。了解它们的细微差别对于有效使用至关重要。

orElse() 与 orElseGet()

  • orElse():返回如果存在,则返回值,如果不存在,则返回提供的默认值。
  • orElseGet():如果存在,则返回值,如果不存在,则返回调用提供的供应商的结果。如果该值存在,则不会调用供应商。

何时使用 orElseGet()

  • 性能优化:当对缺失值执行的操作计算成本较高时,请考虑使用 orElseGet(),因为它可以避免在 isPresent() 场景中不必要的执行。

真实世界函数示例

为了说明差异,请考虑以下函数:

<code class="java">public Optional<String> findMyPhone(int phoneId)</code>

场景 1:orElse()

当可选.isPresent() 时== true:

  • orElse() 将冗余调用后续函数,即使该值已经存在。

当 optional.isPresent() == false 时:

  • orElse() 无论是否必要都会调用后续函数。

场景 2:orElseGet()

当option.isPresent() == true:

  • orElseGet() 不会调用供应商,因为该值存在。

当 option.isPresent() == false 时:

  • orElseGet() 将调用供应商生成默认值。

代码示例

<code class="java">public class TestOptional {
    public Optional<String> findMyPhone(int phoneId) {
        return phoneId == 10
                ? Optional.of("MyCheapPhone")
                : Optional.empty();
    }

    public String buyNewExpensivePhone() {
        System.out.println("Going to a very far store to buy a new expensive phone");
        return "NewExpensivePhone";
    }

    public static void main(String[] args) {
        // Scenario 1: orElse()
        Optional<String> phone = findMyPhone(10).orElse(buyNewExpensivePhone());
        // Scenario 2: orElseGet()
        phone = findMyPhone(-1).orElseGet(() -> buyNewExpensivePhone());
    }
}</code>

The代码演示了 orElse() 和 orElseGet() 根据可选值是否存在的不同行为。

以上是在 Java 中什么时候应该使用Optional.orElseGet()而不是Optional.orElse()?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn