Java 9中添加到Optional类的新方法是什么?

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

Optional.or()

Java 9中引入的or()方法,该方法的参数是功能接口Supplier。此方法始终为我们提供一个非空的Optional 对象。如果Optional对象不为空,则返回Optional 对象本身。否则,它将返回供应商 创建的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()

ifPresentOrElse()方法在Java中9中引入它类似于ifPresent()方法用一个不同的是,我们已经增加了一个可运行 参数。如果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"));
   }
}

输出结果

No value


Optional.stream()

Optional.stream()方法被支撑自从Java 9.该方法可用于从创建一个新的流对象可选 对象。如果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