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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP