我有一个变量
Map<String, Map<String, Integer>> movieToStateCount
看起来有点像
"movieToStateCount": {
"Monster's Inc": {
"Alabama": 1500,
"Ohio": 5,
"Hawaii": 715
},
"Wall-E": {
"Alabama": 30000,
"Ohio": 5000,
"Hawaii": 14589
}
}
我获得这些数字的方式是通过迭代数据库,这样每当我获得一个新条目时,我想将 1 添加到我的 movieToStateCount 中的 Integer 中。如果我只是更新 stateCount 我可以做类似的事情
stateCount.merge(state, 1, Integer::sum);
但是,有没有办法在 map 上进行合并?或者,我需要自己进去进行空检查吗?
谢谢
最佳答案
在主方法中提出了以下函数并进行了一些测试:
public static void main(String[] args) {
final Map<String, Map<String, Integer>> movieToStateCount = new HashMap<>();
addTo(movieToStateCount, "Oldboy", "Texas");
addTo(movieToStateCount, "Oldboy", "Texas");
addTo(movieToStateCount, "Oldboy", "Alabama");
addTo(movieToStateCount, "LOTR", "Somewhere");
System.out.println(movieToStateCount);
}
private static void addTo(final Map<String, Map<String, Integer>> movieToStateCount,
final String movie, final String state) {
movieToStateCount.merge(movie, new HashMap<String, Integer>() {{ put(state, 1); }},
(m1, m2) -> { m1.put(state, m1.getOrDefault(state, 0) + m2.get(state)); return m1; });
}
关于最初的问题,没有提出不允许检查 null 的解决方案,因为 getOrDefault
有效地做到了这一点。
关于java - 使用 Java 合并对 Map<String, Map<String, Integer>> 中的数字求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47703648/