在整个地图中添加循环的最后一个值?

时间:2014-01-07 12:53:09

标签: java

伙计我有一个简单的问题,我无法弄清楚!请帮忙

     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

2 个答案:

答案 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);
    }
}