java - 为什么 Stream.mapToInt 不处理 NullPointerExceptions?
问题描述
此代码将给出 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.
推荐阅读
- adobe-indesign - 有没有办法将尚未创建的图像链接到 indesign 布局中?
- javascript - 阶乘不会相乘
- sql-server - 如何在 SQL 中使用 Division 编写创建语句
- api - Stripe API 错误 - “收到未知参数:来源”
- alloy - 在 Alloy 中执行状态时引用了错误的 sig 对象
- php - 临时文件到新文件夹
- .net - 如何使用命令行的凭据将配置文件发布到 IIS?
- excel - Power Query 中的条件列
- django - 尝试编辑页面时 Wagtail 页面反向错误
- python - 在openCV中使用单应性将PNG粘贴到图像上