鑑於這種代碼:的java 8的FindFirst VS地圖上可選
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
A線拋出
顯示java.lang.NullPointerException:空
而線B返回null。
這種行爲的原因是什麼? findAny()
和map()
返回Optional<T>
。
參見[爲什麼使用FindFirst()拋出NullPointerException如果它發現的第一個元素是空?](https://stackoverflow.com/q/32466799/2711488) – Holger