【问题标题】:BiFunction Object in Map's compute methodMap 的计算方法中的 BiFunction 对象
【发布时间】:2019-07-02 19:43:22
【问题描述】:

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

【问题讨论】:

  • 你确定model == null不应该是quantity == null吗?
  • 谢谢,你是对的。改成quantity == null,就成功了。
  • 但是使用hashmap.merge(i, 1, Integer::sum);更简单,相当于hashmap.merge(i, 1, (a, b) -&gt; a + b);,所以不需要处理null
  • @Holger,谢谢!帮帮我!

标签: java function java-8 hashmap


【解决方案1】:

如果键不在映射中,也会调用计算方法,因此您可以为键创建值。 所以在你的情况下会发生这种情况:

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 中的数量为空。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    相关资源
    最近更新 更多