📜  如果存在则可选抛出 - Java (1)

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

如果存在则可选抛出 - Java

在 Java 中,我们经常需要检查某个对象或变量是否为空,然后才继续执行其他操作。如果对象或变量为空,并且继续执行可能会导致程序出现异常情况,此时我们通常会使用 try-catch 来捕获这些异常。

Java 8 引入了新的 Optional 类来解决这个问题。 Optional 类允许我们更好的处理空值,而不是使用 null 引用。 Optional 类提供了一些方便的方法来检查是否存在值,以及如何处理缺失值。

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 函数并抛出运行时异常。