伙计我有一个简单的问题,我无法弄清楚!请帮忙
for(Investor investor : registerdUsers) {
formatedDate = sdf.format(investor.getRegistrationDate());
if(dateWiseInvestorsMap.containsKey(formatedDate)) {
dateWiseInvestorsList.add(investor);
dateWiseInvestorsMap.put(formatedDate, dateWiseInvestorsList);
} else {
dateWiseInvestorsList.clear();
dateWiseInvestorsList.add(investor);
dateWiseInvestorsMap.put(formatedDate, dateWiseInvestorsList);
System.out.println("here goes date"+formatedDate);
}
}
编辑:添加了打印声明
for(Map.Entry<String, List<Investor>> entry :dateWiseInvestorsMap.entrySet()) {
System.out.println("date :" + entry.getKey() + ", count :" + entry.getValue().size());
}
以下是代码,最后一个值将添加到map的所有值中。
预期:
date :2012-01-01 Count:7
date :2012-01-02 Count:13
date :2012-01-03 Count:12
date :2012-01-04 Count:10
date :2012-01-05 Count:11
date :2012-01-06 Count:8
当前:
date :2012-01-01 Count:8
date :2012-01-02 Count:8
date :2012-01-03 Count:8
date :2012-01-04 Count:8
date :2012-01-05 Count:8
date :2012-01-06 Count:8
答案 0 :(得分:2)
您对所有密钥使用相同的List<Investor>
,因为您反复使用相同的列表。代替:
像这样:
List<Investor> list;
for(Investor investor : registerdUsers) {
formatedDate = sdf.format(investor.getRegistrationDate());
if (dateWiseInvestorsMap.containsKey(formatedDate)) {
list = dateWiseInvestorsMap.get(formattedDate);
} else {
list = new ArrayList<Investor>();
dateWiseInvestorsMap.put(formatedDate, list);
}
list.add(investor);
}
答案 1 :(得分:2)
您可能正在重复使用dateWiseInvestorsList
并在所有地方插入相同的对象。请尝试以下方法:
for(Investor investor : registerdUsers) {
formatedDate = sdf.format(investor.getRegistrationDate());
dateWiseInvestorsList = (List) dateWiseInvestorsMap.get(formatedDate);
if( dateWiseInvestorsList != null ) {
dateWiseInvestorsList.add(investor);
} else {
dateWiseInvestorsList = new ArrayList<Investor>();
dateWiseInvestorsList.add(investor);
dateWiseInvestorsMap.put(formatedDate, dateWiseInvestorsList);
}
}