2014-01-07 2 views
0

Ребята У меня есть простая проблема, которую я не могу понять! Пожалуйста, помогитеПоследнее значение цикла - это добавленная дополненная карта?

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

EDIT: добавлен оператор печати

for(Map.Entry<String, List<Investor>> entry :dateWiseInvestorsMap.entrySet()) { 
      System.out.println("date :" + entry.getKey() + ", count :" + entry.getValue().size()); 
     } 

Вот код, Последнее значение добавляется во всех значениях карты.

Ожидаемое:

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

Я не уверен, как код, который вы опубликовали, связан. Непонятно для меня. – Maroun

+0

Ожидаемые и текущие - это только заявления о печати, которые я написал! который я получаю, когда итерация карты! – user2783484

+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); 
} 
+0

Спасибо! мой вопрос сейчас, почему нет dateWiseInvestorsList.clear() работает? – user2783484

+0

'clear()' is "working", потому что вы ранее назначили список 'dateWiseInvestorsList' раньше, чем код (то есть он не является нулевым), но вы не должны использовать' clear() ', и вам не следует повторно использовать список и над. – Bohemian

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); 
    } 
} 
Смежные вопросы