【问题标题】:Incompatible parameter types in lambda expressionlambda 表达式中的参数类型不兼容
【发布时间】:2021-04-09 21:21:38
【问题描述】:

考虑这段代码:

Map<C1, C2> map;
C1 key;
C2 value;

为什么会这样:

map.computeIfAbsent(key, k -> value)

这不是吗?

map.computeIfAbsent(key, () -> value)

【问题讨论】:

    标签: java dictionary lambda functional-programming weak-references


    【解决方案1】:

    因为computeIfAbsent 方法具有以下签名:

    default V computeIfAbsent(K key,
                              Function<? super K,? extends V> mappingFunction)
    

    所以它需要一个Function,它是一个函数接口,它需要一个参数并返回一个值。而() -&gt; value,不接收任何参数并产生一个值(例如Supplier)。

    【讨论】:

      【解决方案2】:

      除了@dreamcrash's 答案之外,如果密钥不存在,还有一种方法提供Map 的条目。

      已添加到,名为Map#putIfAbsent

      这将完全按照您的想法工作

      map.putIfAbsent("key", ((Supplier<String>) () -> "value").get());
      

      但是这有点复杂,您更喜欢直接使用value

      map.putIfAbsent("key", "value");
      

      【讨论】:

        猜你喜欢
        • 2018-10-09
        • 1970-01-01
        • 1970-01-01
        • 2015-07-22
        • 1970-01-01
        • 2021-10-13
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多