当尝试使用computeIfPresent()方法更改 map 时,使用innerMap时很难实现此方法。
,它可以工作:
Map<String, Integer> mapOne = new HashMap<>();
mapOne.computeIfPresent(key, (k, v) -> v + 1);
这不起作用:
Map<String, Map<String, Integer>> mapTwo = new HashMap<>();
mapTwo.computeIfPresent(key, (k, v) -> v.computeIfPresent(anotherKey, (x, y) -> y + 1);
在第二个示例中,我收到以下错误消息:“lambda表达式中的返回类型错误:无法将整数转换为
Map<String, Integer>
”。我的IDE将v识别为 map 。但是该功能不起作用。
显然该方法返回一个Integer,但是我看不到这与没有Innermap的第一个方法有何不同。到目前为止,我还没有在网上找到类似的案例。
我该如何工作?
最佳答案
外部lambda表达式应返回Map
引用的v
:
mapTwo.computeIfPresent(key,
(k, v) -> {
v.computeIfPresent(anotherKey, (x, y) -> y + 1);
return v;
});
它不能返回表达式
Integer
的v.computeIfPresent(anotherKey, (x, y) -> y + 1);
值。