Группировка нескольких полей в Stream API
Для группировки и подсчета суммы использую конструкцию:
public class Test {
public static void main(String[] args) {
List<SomeClass> list = new ArrayList<>();
list.add(new SomeClass("Someone", 3, 2));
list.add(new SomeClass("AnotherOne", 4, 6));
list.add(new SomeClass("Someone", 1, 4));
Map<String, Integer> someones = list.stream()
// собираем из листа карту
.collect(Collectors.toMap(
// ключ - строка
e -> e.name,
// значение - число,
// суммируем два поля
e -> e.field1 + e.field2,
// суммируем значения
// повторяющихся элементов
Integer::sum,
// имплементация карты
// с сортировкой элементов
// в порядке добавления
LinkedHashMap::new));
System.out.println(someones); // {Someone=10, AnotherOne=10}
}
}
public class SomeClass {
String name;
int field1;
int field2;
public SomeClass(String name, int field1, int field2) {
this.name = name;
this.field1 = field1;
this.field2 = field2;
}
}
Как можно ответ привести к виду [SomeClass ("Someone", field1 = 4, field2 =6), SomeClass("AnotherOne", field1 = 4 , field2 = 6)] , то есть суммировать field1 и field1 с общим name группировать по name и выдавать в List.