java - 为什么 Stream.mapToInt 不处理 NullPointerExceptions?

标签 java java-8 nullpointerexception java-stream

此代码将给出 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()被调用,如果 valuenull , NullPointerException被抛出。mapToInt()只需调用 applyAsInt() ToIntFunction的方法为 Stream 的每个元素传递给它的实例.
没有理由检查一个元素是否为 null并以某种方式处理它,因为它无法知道您希望如何处理 null s。这是 ToIntFunction 的工作实例来决定,以及您的 ToIntFunction不处理 null s。

关于java - 为什么 Stream.mapToInt 不处理 NullPointerExceptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62811361/

相关文章:

Java 使用 lambda 表达式对一个对象中的字段求和

java - 如何定义自定义组合谓词?

java - 从不同的类文件调用方法来执行任务

java - 从通知导航到 Activity 时丢失 Activity 状态

java - ksoap2 发送复杂对象时出错

java - 禁止选择 JTable 上的特定行

java - 队列/链表程序中的 NullPointerException

java - 使用多个外键作为复合主键的一对多实体映射

java - 使用 Java 8 Stream API 过滤嵌套列表

java - 将文本文件中的数据显示到 JTable