Java 循环的最后一个值是通过out映射添加的?

Java 循环的最后一个值是通过out映射添加的?,java,Java,伙计们,我有一个简单的问题,我无法解决!请帮忙 for(Investor investor : registerdUsers) { formatedDate = sdf.format(investor.getRegistrationDate()); if(dateWiseInvestorsMap.containsKey(formatedDate)) { dateWiseInvestorsList.add(i

伙计们,我有一个简单的问题,我无法解决!请帮忙

     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());
        }
当前:

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

您将相同的
列表
放在所有键上,因为您反复使用相同的列表。相反:

  • 当您发现有一个新密钥时,创建一个新列表
  • 当您拥有现有密钥时检索现有列表
像这样:

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);
 }
列表;
用于(投资者:注册用户){
formateDate=sdf.format(investor.getRegistrationDate());
if(dateWiseInvestorsMap.containsKey(格式化日期)){
list=dateWiseInvestorsMap.get(格式化日期);
}否则{
列表=新的ArrayList();
dateWiseInvestorsMap.put(格式化日期,列表);
}
列表。添加(投资者);
}

您将相同的
列表
放在所有键上,因为您反复使用相同的列表。相反:

  • 当您发现有一个新密钥时,创建一个新列表
  • 当您拥有现有密钥时检索现有列表
像这样:

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);
 }
列表;
用于(投资者:注册用户){
formateDate=sdf.format(investor.getRegistrationDate());
if(dateWiseInvestorsMap.containsKey(格式化日期)){
list=dateWiseInvestorsMap.get(格式化日期);
}否则{
列表=新的ArrayList();
dateWiseInvestorsMap.put(格式化日期,列表);
}
列表。添加(投资者);
}

您可能在重复使用
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);
    }
}
for(投资者:注册用户){
formateDate=sdf.format(investor.getRegistrationDate());
dateWiseInvestorsList=(List)dateWiseInvestorsMap.get(FormattedDate);
if(dateWiseInvestorsList!=null){
dateWiseInvestorsList.add(投资人);
}否则{
DateWiseInvestorList=新建ArrayList();
dateWiseInvestorsList.add(投资人);
dateWiseInvestorsMap.put(格式化日期,dateWiseInvestorsList);
}
}

您可能在重复使用
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);
    }
}
for(投资者:注册用户){
formateDate=sdf.format(investor.getRegistrationDate());
dateWiseInvestorsList=(List)dateWiseInvestorsMap.get(FormattedDate);
if(dateWiseInvestorsList!=null){
dateWiseInvestorsList.add(投资人);
}否则{
DateWiseInvestorList=新建ArrayList();
dateWiseInvestorsList.add(投资人);
dateWiseInvestorsMap.put(格式化日期,dateWiseInvestorsList);
}
}

我不确定您发布的代码是否相关。我不清楚。预期的和当前的只是我写的打印声明!!这是我迭代地图时得到的!此代码不会导致电流输出。在此处发布相关代码。@RuchiraGayanRanaweera请找到编辑!你能在每个环路打印出地图吗?我有一种感觉,你的钥匙可能在碰撞。也许是一个自定义的hashcode方法?我不确定你发布的代码是如何关联的。我不清楚。预期的和当前的只是我写的打印声明!!这是我迭代地图时得到的!此代码不会导致电流输出。在此处发布相关代码。@RuchiraGayanRanaweera请找到编辑!你能在每个环路打印出地图吗?我有一种感觉,你的钥匙可能在碰撞。也许是一个自定义的hashcode方法?谢谢!我现在的问题是为什么不DateWiseInvestorList.clear()正在工作???
clear()
正在工作,因为您在代码前面为
DateWiseInvestorList
分配了一个列表(即它不为空),但您不应该使用
clear()
,也不应该反复使用该列表。谢谢!我现在的问题是为什么DateWiseInvestorList.clear()正在工作???
clear()
正在“工作”,因为您在代码的前面为
DateWiseInvestorList
分配了一个列表(即它不为空),但您不应该使用
clear()
,也不应该反复使用该列表。