到现在为止我们已经介绍了Stream的所有操作,没看过的同学请出门左转 Java 8 Stream(四、Stream终端操作:forEach()、Match、find()、max、min()、reduce()、collect()、toArray()、count())。
文章目录
最后我们介绍一下Optional类和IDEA下的Stream调试。
一、Optional类
(一)简介
Optional类是Java 8 引入的一个为避免空指针异常(NullPointerException)的包装类。这意味着Optional类即可以包含对象也可以为NULL。
(二)常用方法
1、isPresent()
说明: 判断Optional实例是否为空,如果非空则返回true。
示例:
System.out.println(Arrays.asList("1", "2", "3").stream().filter(x -> x.equals("3")).findAny().isPresent()); // true
2、ifPresent()
说明: 该方法也可以判断Optional实例是否为空。不同的是,该方法接受一个函数式接口Consumer<T>为入参,如果非空则执行该函数。
示例:
Arrays.asList("1", "2", "3").stream().filter(x -> x.equals("3")).findAny().ifPresent(System.out::println); // 3
3、orElse()
说明: 返回Optional实例的值,如果为空返回传递的默认值。需要特别注意的是,orElse()是热情计算的,即无论实例值是否为空,默认值均将被计算得出,在高并发情况下这将对性能产生较大影响,因此推荐使用下面的orElseGet() 方法——它是惰性计算的。
示例: