📜  Java中可选的 orElseGet() 方法及示例(1)

📅  最后修改于: 2023-12-03 14:42:43.021000             🧑  作者: Mango

Java中可选的 orElseGet() 方法及示例

在Java中的 Optional 类中,提供了 orElse() 和 orElseGet() 两个方法来处理 Optional 对象为空的情况。两个方法的区别在于 orElse() 无论 Optional 对象是否为空都会执行,而 orElseGet() 只有在 Optional 对象为空时才会执行。

orElseGet() 方法

orElseGet()方法的声明如下:

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

其中 Supplier 接口是 Java 8 中新增的一种函数式接口,它只有一个 get() 方法,无参数,有返回值。

orElseGet() 方法有一个参数 other,它是一个 Supplier 接口类型的函数接口。如果可选对象不为 null,orElseGet() 方法返回 Optional 对象的值,否则调用 other 方法,该方法会提供一个默认值。

示例

现在我们来看一个示例,学习如何在我们的代码中使用 orElseGet() 方法:

public class Demo {
    public static void main(String[] args) {
        Optional<String> optional = Optional.ofNullable(null);
        String result = optional.orElseGet(() -> "默认值");
        System.out.println(result); // 输出结果为:默认值
    }
}

上例中,我们先创建了一个为空的 Optional 对象,然后调用 orElseGet() 方法,实现了在 Optional 对象为空时提供一个默认值的功能。

注意事项

需要注意的是,orElseGet() 方法的入参是一个 Supplier 接口类型,因此在调用 orElseGet() 方法时需要传入一个 Lambda 表达式或方法引用,该 Lambda 表达式或方法引用中提供默认值。

此外,为了提高代码的可读性,供给默认值的 Lambda 表达式往往是一条语句的 Lambda 表达式。这样,我们可以将它封装在一对大括号中,以便更好地阅读代码。例如,

Optional<Integer> optional = Optional.of(1);
Integer result = optional.orElseGet(() -> {
    int a = 2;
    int b = 3;
    return a + b;
});
System.out.println(result); // 输出结果为:1

如果默认值的创建过程比较复杂,则建议使用 orElse() 方法,将所有代码都封装在一个完整的方法体中,以提高代码的可读性和简洁性。