首页 > 文章列表 > Java 9中Optional类添加了哪些新的方法?

Java 9中Optional类添加了哪些新的方法?

334 2023-08-20

一个 Optional 类提供了一个容器,该容器可能包含也可能不包含一个 非空值。这个 Optional 类在 Java 8 中引入,以减少代码中可能生成 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);
   }  
}

Output

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"));
   }
}

Output

No value

Optional.stream()

The Optional.stream() method is supported since Java 9. This method can be used to create a new stream object from an Optional object. If an Optional object contains a value, it returns the stream object containing that value.

Example

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);
   }
}

Output

Jai
Adithya