如何解决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
(如果密钥不存在)。
它已被添加到 java-8 并被称为 Map#putIfAbsent
这完全符合你的想法
map.putIfAbsent("key",((Supplier<String>) () -> "value").get());
不过这有点复杂,您更喜欢直接使用 value
map.putIfAbsent("key","value");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。