我有这样的地图:
private Map<String, List<List<String>>> someMap;
private List<List<String>> someList1;
private List<String> someList2;
....一些初始化..... ....一些名单人口......
然后我有,
if(someMap.get(someKey) == null){
someList1.add(someList2);
someMap.put(someKey, someList1);
} else {
someMap.get(someKey).add(someList2);
}
请注意,添加到地图后列表会变得清晰,然后会填充。
例如,我有两个键“Apple”和“Orange”,带有一些值。循环之后,我只获得了橙色。之前的密钥被覆盖!!!
编辑:在循环的每次迭代中,都会填充一个列表。循环结束后,它会被添加到地图中,添加后,列表会变为清晰()。
有什么建议吗?感谢。
代码: http://pastebin.com/m2712e04 [根据要求..所以请不要责怪我发布它..]
答案 0 :(得分:3)
根据您对Lucero问题的评论:
您是否一遍又一遍地重复使用相同的List实例,即执行
someList1.add(someList2);
someMap.put(someKey, someList1);
someList1.clear()
someList1.add(stuff)
someMap.put(someOtherKey, someList1);
这不起作用,因为someList1.clear()将清除someMap 中的列表。您需要每次都创建一个新的List实例:
someList1.add(someList2);
someMap.put(someKey, someList1);
someList1 = new List<...>();
someList1.add(stuff)
someMap.put(someOtherKey, someList1);
答案 1 :(得分:3)
仔细阅读您的代码:
你所描述的内容真的不应该发生。您应该使用调试器并逐步执行这些行,并检查这行代码是否实际上正在执行您正在考虑的事情(ln 57):
clientCode = account.getClientId().getClientCode();
很可能是在您到达第二行之前触发了异常,或者有意外的重复数据等。
另外,我之前说过的内容仍然有效。在158,而不是做:
reportDataSubList.clear();
待办事项
reportDataSubList = new ArrayList<String>();
你的循环顶部还有很多不必要的初始化。
关于你的评论:
在循环的每次迭代中,列表 得到人口。它循环结束了 添加到地图并添加后 列表清晰()
我很惊讶这不会破坏任何东西。地图中的所有列表都应为空。
如果你没有这样做
List a = new ArrayList();
但正在做
a.clear();
然后清楚为什么列表是空的。您的所有参赛作品都是相同的参考。
宣布
List a = new ArrayList();
您正在创建List对象的新实例,无论您对此对象执行的操作都不会影响您已创建的内容。
答案 2 :(得分:2)
我怀疑你想要一遍又一遍地添加相同的列表。您需要为每个新密钥创建新的列表实例。
编辑:您的someKey变量是否会发生变化?您是否使用调试器进入代码并查看发生了什么?
编辑:更像这样:
// store the current payment info
reportDataSubList = new ArrayList<String>();
reportDataSubList.add(clientCode);
//...
reportDataList = reportData.get(clientCode);
if(reportDataList == null){
reportDataList = new ArrayList<List<String>>();
reportData.put(clientCode, reportDataList);
}
reportDataList.add(reportDataSubList);
但我不确定您使用的数据结构是否适合该任务。正确的实体对象甚至是XML都可以与悍马匹配。