2012-11-27 3 views
0

Я пытаюсь, чтобы одна кнопка обрабатывала несколько входов в одних и тех же вводах. У меня есть 16 ящиков ввода, каждый со своим идентификатором # (YfProduct), который я использую в качестве ключа для моего хэшмапа. Для входного значения у меня есть Вес. Пользователь будет вводить любой двойной вес, который им нужен, но сколько бы полей ввода они ни пожелали, и нажмите кнопку (a4j: commandButton), которая активирует метод ниже.Нужно иметь HashMap добавить (сумма) несколько значений в пределах ключа

private HashMap<Integer, Double> storeWeight = new HashMap<Integer, Double>(); 

public void storeWeight(Yieldfl yieldfl){ 
    for (YieldItem row : yielditem) { 
    storeWeight.put(row.getYfProduct(), row.getWeight()); 
    System.out.print(storeWeigt)} 
} 

Сейчас этот код установит соответствующие значения с правой кнопкой, и заменить эти значения с новым входом введенного и другой кнопкой. Однако то, что я пытаюсь сделать, заключается в том, что bean сохраняет предыдущие значения и суммирует следующие значения, введенные с предыдущей записью, имеющей один и тот же ключ. Таким образом, в конце ввода пользователя HashMap будет содержать 16 ключей с суммой отдельных значений, добавляемых для каждого ключа. Я не смог придумать способ сделать это без серьезного жесткого кодирования. Помощь очень ценится.

+0

Я предполагаю, что это был нужен ArrayList, просто не знают, как осуществить. – TaylorSmolik

ответ

0

Так что это на самом деле оказалось простым исправлением, я поставлю решение здесь, просто если кто-то столкнется с подобной проблемой. Это мой первый опыт работы с HashMap, поэтому мне удалось помочь коллеге. Мне понадобилось значение для вызова ключа.

storeWeight.put(row.getYfProduct(), storeWeight.get(row.getYfProduct() + (row.getWeight())); 

и избежать нулевых указателей:

public void storeWeight(Yieldfl yieldfl){ 
    for (YieldItem row : yielditem) { 
     Double oldValue = storeWeight.get(row.getYfProduct()); 
     if (oldValue == null) 
      oldValue = 0.0; 
    storeWeight.put(row.getYfProduct(), oldValue + (row.getWeight())); 
    row.setWeight(0.0); 
    System.out.print(storeWeight);} 
}