当尝试使用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;
                            });

它不能返回表达式Integerv.computeIfPresent(anotherKey, (x, y) -> y + 1);值。

10-02 09:26