Java 9 中 Optional 类新增了哪些方法?

javaobject oriented programmingprogramming更新于 2025/7/15 1:48:17

Optional 类提供了一个容器,该容器可能包含也可能不包含非空值。Java 8 中引入了此 Optional 类,以减少代码中可能生成 NullPointerException 的位置。Java 9 为 Optional 类添加了三种新方法:or()、ifPresentOrElse() 和 stream(),可帮助我们处理默认值。

Optional.or()

Java 9 中引入了 or() 方法,该方法的参数是函数式接口 Supplier。此方法始终为我们提供一个不为空的 Optional  对象。如果 Optional 对象不为空,则返回 Optional  对象本身。否则,返回 Supplier  创建的 Optional 对象。

示例

import java.io.IOException;
import java.util.Optional;
public class OptionalOrMethodTest {
   public static void main(String[] args) throws IOException {
      String str = null;
      Optional<String> opt = Optional.ofNullable(str);
      Optional<String> result = opt.or(() -> Optional.of("Adithya"));
      System.out.println(result);
   }  
}

输出

Optional[Adithya]

Optional.ifPresentOrElse()

Java 9 中引入了 ifPresentOrElse() 方法。它与 ifPresent() 方法类似,但有一点不同,即我们添加了一个 Runnable  参数。如果 Optional  对象为空,则可以执行 Runnable  接口的对象。

示例

import java.util.Optional;
public class OptionalIfPresentOrElseTest {
   public static void main(String[] args) {
      String str = null;
      Optional<String> opt = Optional.ofNullable(str);
      opt.ifPresentOrElse(
            x -> System.out.println(x),
            () -> System.out.println("No value"));
   }
}

输出

无值

Optional.stream()

自 Java 9 起支持 Optional.stream() 方法。此方法可用于从 Optional  对象创建新的流对象。如果 Optional 对象包含值,则返回包含该值的流对象。

示例

import java.io.IOException;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
public class OptionalStreamMethodTest {
   public static void main(String[] args) throws IOException {
      List<Optional<String>> list = List.of(
            Optional.of("Jai"),
            Optional.empty(),
            Optional.of("Adithya"));
      Stream<String> stream = list.stream().flatMap(Optional::stream);
      stream.forEach(System.out::println);
   }
}

输出

Jai
Adithya

相关文章


有用资源