首页 > 解决方案 > 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);

标签: javafunctionjava-8hashmap

解决方案


如果键不在映射中,也会调用 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 中的数量为空。


推荐阅读