Map的计算方法中的BiFunction对象

时间:2019-07-02 19:43:22

标签: java function java-8 hashmap

我想创建一个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);

1 个答案:

答案 0 :(得分: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)不为null,因此三元运算符的第二部分将被评估,并且将由于以下原因而对NPE失败:null + addition;

您在lambda中的数量为空。