【发布时间】:2018-10-03 11:05:28
【问题描述】:
当尝试使用 computeIfPresent() 方法更改地图时,我在使用 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。但是这个功能不起作用。
显然该方法返回一个整数,但我看不出这与没有 Innermap 的第一个方法有何不同。目前我还没有在网上找到类似的案例。
我怎样才能让它工作?
【问题讨论】:
-
在第一个示例中,映射的类型为
<String, Integer>,因此返回的 lambda 函数和整数很好。但是,在第二个示例中,映射的类型为<String, Map>,因此 lambda 函数应返回映射......而不是整数。
标签: java dictionary hashmap