此代码将给出 NullPointerException。 mapToInt (map) 方法不是应该处理 NPE 吗?
List<Integer> list = Arrays.asList(null, null);
OptionalDouble op = list.stream()
.mapToInt(val->val)
.average();
最佳答案
为什么你期望它处理NullPointerException
?
lambda 表达式 val->val
相当于:
new ToIntFunction<Integer> () {
int applyAsInt(Integer value) {
return value;
}
}
当一个方法具有 int
返回类型返回 Integer
, 自动拆箱发生。这意味着 value.intValue()
被调用,如果 value
是 null
, NullPointerException
被抛出。mapToInt()
只需调用 applyAsInt()
ToIntFunction
的方法为 Stream
的每个元素传递给它的实例.没有理由检查一个元素是否为
null
并以某种方式处理它,因为它无法知道您希望如何处理 null
s。这是 ToIntFunction
的工作实例来决定,以及您的 ToIntFunction
不处理 null
s。
关于java - 为什么 Stream.mapToInt 不处理 NullPointerExceptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62811361/