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


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

输出

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

更新于:2020年2月21日

182 次查看

启动您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.