2016-03-01 3 views
2

У меня есть 3 класса:Java группировки значений в ArrayList

  1. класс расчета (включает в себя метод FinalPrice(), который вернется с двойным значением)
  2. Файл класса чтения (файл CSV нагрузки, расщепленный данные в массив и вернуться с первым элементом массива, который является строкой. Включает в себя метод GetType())
  3. класса контракта (содержит только конструктор)

File a = new File("D:\\...\\contract.csv"); Calculation1 calc = new Calculation1(a); File_Reader1 b = new File_Reader1(); Contract c = new Contract(b.getType(a),calc.FinalPrice());

мне нужен список объектов для хранения контрактов и группировка ключей (что b.getType (а)) и просуммировать их значения (что calc.FinalPrice()), как

Input (например):

list.add("AB", 5); list.add("AC", 8); list.add("AB", 12);

Я хотел бы получить выход так:

"AB" : 17 "AC" : 8

Может кто-нибудь мне помочь?

+0

вы можете перебирать свой ArrayList или карту или независимо, и во втором списке совокупной величины (проверьте, содержит(), если ключ уже во втором списке или нет) - это, конечно, не очень показательно, но оно должно работать. В зависимости от того, насколько велик ваш список/карта –

+1

Это дубликат: http://stackoverflow.com/questions/23848129/is-there-an-aggregateby-method-in-the-stream-java-8-api – Tunaki

ответ

1

В Java 8,

entries.stream().collect(Collectors.groupingBy(
     entry -> entry.getKey(), 
     Collectors.summingInt(entry -> entry.getValue()))); 
Смежные вопросы