我有一个变量
Map<String, Map<String, Integer>> movieToStateCount
看起来有点像
"movieToStateCount": {
"Monster's Inc": {
"Alabama": 1500,
"Ohio": 5,
"Hawaii": 715
},
"Wall-E": {
"Alabama": 30000,
"Ohio": 5000,
"Hawaii": 14589
}
}
我得到这些数字的方法是迭代数据库,这样每当我得到一个新条目时,我想在我的movieToStateCount中将我的整数加1。如果我只是更新stateCount,我可以做类似的事情
stateCount.merge(state, 1, Integer::sum);
但是,有没有办法在地图上合并?或者,我是否需要自己进行空检查?
谢谢,
答案 0 :(得分:2)
在main方法中提出以下函数和一点测试:
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
有效地做到了。