Java8的Stream方法findAny空指针异常(NullPointerException)实例对比
实战介绍 学习完Java8的Stream方法,可能你正准备大展身手,却发现遇到不少问题,本篇文章为大家带来一个findAny方法抛出java.lang.NullPointerException的场景。 实战内容 先看一下下面的代码,猜测一下执行之后会打印什么? public class FindAnyTest { @Test public void test() { List<Foo> list = new ArrayList<>(); list.add(new Foo()); // 方法一 Integer id = list.stream().map(Foo::getId).findAny().orElse(null); System.out.println(id); // 方法二 id = list.stream().findAny().map(Foo::getId).orElse(-1); System.out.println(id); } } class Foo { Integer id; public Integer getId() { return this.id; } } 然后,执行单元测试方法,你会发现方法一抛出了异常: java.lang.NullPointerException 如果删除方法一,只执行方法二,则不会出现异常。为什么呢? 具体分析 首先方法一种