📅  最后修改于: 2023-12-03 14:53:22.878000             🧑  作者: Mango
在 Java 中,我们经常需要检查某个对象或变量是否为空,然后才继续执行其他操作。如果对象或变量为空,并且继续执行可能会导致程序出现异常情况,此时我们通常会使用 try-catch 来捕获这些异常。
Java 8 引入了新的 Optional 类来解决这个问题。 Optional 类允许我们更好的处理空值,而不是使用 null 引用。 Optional 类提供了一些方便的方法来检查是否存在值,以及如何处理缺失值。
Optional 类是一个包含一个非 null 值或者空值的容器对象。Optional 类没有 public 构造方法,因此不能直接实例化 Optional 对象。可以使用工厂方法 of
来创建 Optional 实例,如下所示:
Optional<String> optional = Optional.of("optional");
我们可以使用 isPresent()
方法检查 Optional 实例中是否存在值。如果值存在,则返回 true;否则返回 false。
Optional<String> optional = Optional.of("optional");
if (optional.isPresent()) {
System.out.println(optional.get());
}
使用 get()
方法可以获取 Optional 实例中的值。在此之前,我们需要先使用 isPresent()
方法检查 Optional 实例中是否存在值。
Optional<String> optional = Optional.of("optional");
if (optional.isPresent()) {
System.out.println(optional.get());
}
我们可以使用 filter()
方法过滤 Optional 实例中的值。如果值存在并且满足给定的条件,则返回该 Optional 实例;否则返回一个空的 Optional 实例。
Optional<String> optional = Optional.of("optional");
Optional<String> filtered = optional.filter(s -> s.startsWith("opt"));
System.out.println(filtered.orElse("没有找到匹配的字符串"));
在上面的示例中,我们使用 filter 方法将 optional
中的值过滤为以 "opt"
开头的字符串。如果找到匹配的字符串,则输出匹配的字符串;否则输出默认消息。
我们可以使用 map()
方法转换 Optional 实例中的值。如果值存在,则将该值传递给指定的函数,并返回一个表示该值的 Optional 实例。
Optional<String> optional = Optional.of("optional");
Optional<Integer> mapped = optional.map(String::length);
System.out.println(mapped.orElse(0));
在上面的示例中,我们使用 map
方法将 optional
中的字符串映射为它的长度,然后输出字符串长度。如果字符串为空,则输出默认值 0
。
我们可以使用 orElse()
或 orElseGet()
方法获取 Optional 实例中的值,如果 Optional 实例中没有值,则返回一个默认值。
orElse()
方法会返回传递的默认值,如果 Optional 实例中存在一个值,则返回该值。
Optional<String> optional = Optional.of("optional");
String value = optional.orElse("没有找到匹配的字符串");
System.out.println(value);
在上面的示例中,我们将 optional
中的值作为默认值传给 orElse
方法。由于 optional
中存在一个值,因此 orElse
方法返回该值。
orElseGet()
方法与 orElse()
方法类似,但是它接受一个函数作为参数。如果 Optional 实例中存在一个值,则返回该值。否则调用指定的 Supplier 函数,并返回该函数的返回值。
Optional<String> optional = Optional.empty();
String value = optional.orElseGet(() -> "没有找到匹配的字符串");
System.out.println(value);
在上面的示例中,optional
实例是空的,因此执行 Supplier 函数并输出默认值。
我们可以使用 orElseThrow()
方法在 Optional 实例为空时抛出指定的异常。该方法接受一个 Supplier 函数,该函数返回将被抛出的异常。
Optional<String> optional = Optional.empty();
optional.orElseThrow(() -> new RuntimeException("没有找到匹配的字符串"));
在上面的示例中,optional
实例是空的,因此执行 Supplier 函数并抛出运行时异常。