2014-11-22 3 views
2

Я пытаюсь очистить свой код и хочу использовать оптимизированные прошивки в коде.хэш-карта с arraylist и создать новый arraylist из него

В настоящее время у меня есть HashMap этого типа private HashMap<String, ArrayList<allProperty>> fData;

Так данные поступают от сервера в каждые 5 сек. и Я обновляю эту HashMap каждый 5 секунд что-то вроде этого

 fData.put("Student", allStudent); 
     fData.put("Emp", allEmp); 
     fData.put("Other", allOther); 

Так от allproperty объекта класса, есть знаки поле, и я пытаюсь извлечь это поле знаков для всех ключей и создания нового ArrayList целого числа, так что я может добавлять метки в созданный arraylist каждые 5 секунд.

Я использовал различный arraylist для каждого ученика, emp и других ранее, и он работал нормально, но, похоже, много повторения кода. Вот почему я пытаюсь достигнуть его с хэш-карта

Я пытаюсь soemthing как это, но это не добавление данных ...

for (String type: allTypes) { 
      if(fData.get(type).size() > 0){ 
       arraySort(fData.get(type)); 
       temp = new ArrayList<Integer>(); 
       temp.add(fData.get(type).get(0).marks); 
      } 
      cData.put(type, temp); 

CTYPE является HashMap типа приведены ниже и

private HashMap<String, ArrayList<Integer>> cData; 

где allTypes является

signalTypes.add("Student"); 
    signalTypes.add("Emp"); 
    signalTypes.add("Other"); 

в конце я хочу три новых ArrayList с ключом и чтобы добавить данные каждые 5 секунд. Благодаря

+0

класс allProperty должны иметь знаки как общественное поле ... –

+0

да есть ... я могу получить доступ это .. что я знаю – user3290805

+0

Вы уверены, что было бы не лучше использовать 'addAll' для temp? Неясно, какой тип 'fData' и' mark'. –

ответ

2
  1. Получите ArrayList

2а. Если этого не существует - поставьте new ArrayList

2b. ИСПОЛЬЗУЙТЕ ИСПОЛЬЗОВАТЬ этот ArrayList. Это изменчиво. Таким образом, вы можете вызвать .add на этом объекте, и он будет обновляться в HashMap

Попробуйте это:

for (String type: allTypes) { 
     if (fData.get(type).size() > 0) { 
      arraySort(fData.get(type)); 
      if (cData.get(type) == null) { 
       temp = new ArrayList<Integer>(); 
       temp.add(fData.get(type).get(0).marks); 
       cData.put(type, temp); 
      } else { 
       cData.get(type).add(fData.get(type).get(0).marks); 
      } 
     } 
} 
+0

, но я думаю, что я делаю то же ... идея состоит в том, чтобы обновить каждый атрибут, специфичный для ключа. – user3290805

+0

Вы создаете 'новый ArrayList' вместо того, чтобы использовать старый в своем коде. Когда вы используете старый, вы не должны называть map.put() –

+0

, но если я не буду создавать новый, цикл будет выполняться три раза и вместо этого добавит три значения для одного ключа. – user3290805

Смежные вопросы