考虑以下代码:
class Foo {
Integer attr;
public Integer getAttr() {return attr;}
}
List<Foo> list = new ArrayList<>();
list.add(new Foo());
list.stream().map(Foo::getAttr).findAny().orElse(null); //A
list.stream().findAny().map(Foo::getAttr).orElse(null); //B
Line A 抛出异常
java.lang.NullPointerException: null
而 Line B 返回 null。
这种行为的原因是什么?findAny()
和 map()
都返回 Optional<T>
。