1. Optional简介
Java 8中引入了Optional类来解决null的问题,Optional是一个容器类,它可以保存类型T的值或者null,通过isPresent()方法判断是否有值,通过get()方法获取值。
public class OptionalDemo {
public static void main(String[] args) {
Optional optional = Optional.of("hello world");
System.out.println(optional.isPresent()); // true
System.out.println(optional.get()); // hello world
}
}
在Optional类中还有很多其它有用的方法,比如orElse()、orElseGet()、orElseThrow()等,这里就不再赘述。
2. Optional.stream()方法的作用
Java 9中新增了Optional.stream()方法,它可以将Optional对象转化为Stream对象,这样就可以在Stream API上使用了。使用Stream API可以让我们更加方便地对集合进行操作,相比传统的for循环更加简洁、优雅。
Optional.stream()方法的语法如下:
public Stream stream()
其中T是Optional中包装的类型。
3. 使用Optional.stream()方法的示例
3.1 使用Optional.stream()方法操作非空Optional对象
第一个示例是关于如何使用Optional.stream()方法操作非空Optional对象。下面的代码演示了如何使用Optional.stream()方法从一个Optional对象中获取值并处理它:
Optional optional = Optional.of("hello world");
optional.stream()
.forEach(System.out::println);
上面的代码等价于以下的传统方式:
Optional optional = Optional.of("hello world");
if (optional.isPresent()) {
System.out.println(optional.get());
}
如果Optional非空,使用Optional.stream()方法可以写出更加简洁、优雅的代码,如果Optional为空,使用Optional.stream()方法不会执行任何操作。
3.2 使用Optional.stream()方法操作空Optional对象
下一个示例是关于如何使用Optional.stream()方法操作空Optional对象。下面的代码演示了如何使用Optional.stream()方法从空Optional对象中获取值并处理它:
Optional optional = Optional.empty();
optional.stream()
.forEach(System.out::println);
上面的代码等价于以下的传统方式:
Optional optional = Optional.empty();
if (optional.isPresent()) {
System.out.println(optional.get());
}
使用Optional.stream()方法不会执行任何操作,这就是Optional.stream()的好处,它可以让我们写出更加简洁、优雅的代码。
3.3 使用Optional.stream()方法进行过滤操作
下一个示例是关于如何使用Optional.stream()方法进行过滤操作。下面的代码演示了如何使用Optional.stream()方法从一个Optional对象中获取值并过滤它:
Optional optional = Optional.of("hello world");
optional.stream()
.filter(str -> str.startsWith("h"))
.forEach(System.out::println);
上面的代码等价于以下的传统方式:
Optional optional = Optional.of("hello world");
if (optional.isPresent() && optional.get().startsWith("h")) {
System.out.println(optional.get());
}
使用Optional.stream()方法可以写出更加简洁、优雅的代码,并且可以避免NullPointerException错误。
3.4 使用Optional.stream()方法进行映射操作
下一个示例是关于如何使用Optional.stream()方法进行映射操作。下面的代码演示了如何使用Optional.stream()方法从一个Optional对象中获取值并将其映射为另一个对象:
Optional optional = Optional.of("hello world");
optional.stream()
.map(str -> str.toUpperCase())
.forEach(System.out::println);
上面的代码等价于以下的传统方式:
Optional optional = Optional.of("hello world");
if (optional.isPresent()) {
String str = optional.get();
System.out.println(str.toUpperCase());
}
使用Optional.stream()方法可以写出更加简洁、优雅的代码。
4. 总结
通过本文介绍,读者应该了解了Java 9中新增的Optional.stream()方法的作用及使用方法。使用Optional.stream()方法可以让我们更加方便地对Optional对象进行操作,避免NullPointerException错误。
总之,使用Optional类可以帮助我们更好地处理null值,提高代码的可读性和健壮性。