鉴于此代码:
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
Run Code Online (Sandbox Code Playgroud)
A线投掷
java.lang.NullPointerException:null
而B行返回null.
这种行为的原因是什么?无论findAny()和map()回报Optional<T>.