Группировка нескольких полей в 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.


Ответы (0 шт):