java - Map 的计算方法中的 BiFunction 对象
问题描述
我想创建一个 BiFunction 对象(Lambda),并在 Map 的计算方法中使用它。它会正确编译,但会在运行时抛出 NullPointerException。
private BiFunction<String, Integer, Integer> biFunctionWithAddition(final Integer addition) {
return (model, quantity) -> model == null ? addition : quantity + addition;
}
hashmap.compute(i, biFunctionWithAddition(1)) //throw NullPointerException
//the one that can work should be:
hashmap.compute(i, (num, quantity) -> num == null : 1 ? quantity + 1);
解决方案
如果键不在映射中,也会调用 Compute 方法,因此您可以为键创建值。所以在你的情况下会发生这种情况:
hashmap.compute("KEY_NOT_IN_MAP", biFunctionWithAddition(1));
会像这样调用你的 lambda 函数:
("KEY_NOT_IN_MAP",null) ->KEY_NOT_IN_MAP" == null ? addition : null + addition;
所以你可以看到 key(model) 不为空,所以三元运算符的第二部分将被评估,并且会因为 NPE 而失败:null + addition;
您在 lambda 中的数量为空。
推荐阅读
- flutter - 如何在flutter/动态条形图中显示Json api数据
- java - 获取 int 的简单方法,检查它是否在最小值/最大值内,并返回该值.. 无法脱离方法
- python - 如何将构造函数内容放在另一个文件中并执行类构造函数中的内容
- asp.net-core - 实体框架核心 - 一对多但父级也具有单个子级的导航属性?
- pine-script - 更改线图的位置
- flutter - onBackgroundMessage 没有被称为颤振消息传递
- android - 如何获取短信线程
- php - Laravel 8:目标类不存在错误
- angular - 如何在打字稿中使用 each(..) 函数?
- c - 可以使用单个指针将各种类型的值写入内存地址吗?