Ale*_*nov 3 java nullpointerexception java-8 java-stream
此代码将给出 NullPointerException。mapToInt (map) 方法不是应该处理 NPE 吗?
List<Integer> list = Arrays.asList(null, null);
OptionalDouble op = list.stream()
.mapToInt(val->val)
.average();
Run Code Online (Sandbox Code Playgroud)
你为什么期望它处理NullPointerException?
lambda 表达式val->val等效于:
new ToIntFunction<Integer> () {
int applyAsInt(Integer value) {
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
当具有int返回类型的方法返回 时Integer,会发生自动拆箱。这意味着value.intValue()被调用,如果value是null,NullPointerException则抛出。
mapToInt()简单地为 的每个元素调用传递给它applyAsInt()的ToIntFunction实例的方法Stream。
它没有理由检查一个元素是否存在null并以某种方式处理它,因为它无法知道您希望如何处理nulls。ToIntFunction决定这一点是实例的工作,而您ToIntFunction不处理nulls。