我从DB中获取了一些数据并将其存储在列表中,如下所示:
List<MyObject> list =new ArrayList<MyObject>();
list包含2个MyObject类的对象。
我有2个地图实现:
Map<String,Map<String,Long>> map1 = new HashMap<String,Map<String,Long>>();
Map<String,Long> map2 = new HashMap<String,Long>();
我迭代了列表并执行了以下代码
for(myObjectObj : list){
map2.put(myObjectObj.getAction(),myObjectObj.getCount());
map1.put(myObjectObj.getName(),map2);
}
我想要的最终输出是map1,方法如下:
Name1 action1 count1
action2 count2
Name2 action3 count3
action4 count4
但是我的代码没有得到所需的输出。
答案 0 :(得分:2)
在您当前的版本中,您添加到map2实例的数据实际上会添加到map1的所有条目中,因为map2引用对于所有map1实例都是通用的。
鉴于您需要为列表中的每个条目创建一个新的嵌套映射,您需要在循环中获取或实例化一个新的map2:
for(myObjectObj : list){
String key = myObjectObj.getName();
Map<String,Long> map2 = map1.get(key);
if (map2 == null) {
map2 = new HashMap<String,Long>();
map1.put(key, map2);
}
map2.put(myObjectObj.getAction(),myObjectObj.getCount());
}