微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

lambda 表达式中的参数类型不兼容

如何解决lambda 表达式中的参数类型不兼容

考虑这个代码

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

为什么这样做:

map.computeIfAbsent(key,k -> value)

这不是吗?

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

解决方法

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

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

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

,

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

它已被添加到 并被称为 Map#putIfAbsent

这完全符合你的想法

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

不过这有点复杂,您更喜欢直接使用 value

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。