Java 8 Stream: groupingBy с несколькими сборщиками

Я хочу использовать Java 8 Stream и Group по одному классификатору, но иметь несколько функций Collector. Так, например, при группировке вычисляется среднее значение и сумма одного поля (или, может быть, другого поля).

Я пытаюсь немного упростить это на примере:

public void test() {
    List<Person> persons = new ArrayList<>();
    persons.add(new Person("Person One", 1, 18));
    persons.add(new Person("Person Two", 1, 20));
    persons.add(new Person("Person Three", 1, 30));
    persons.add(new Person("Person Four", 2, 30));
    persons.add(new Person("Person Five", 2, 29));
    persons.add(new Person("Person Six", 3, 18));

    Map<Integer, Data> result = persons.stream().collect(
            groupingBy(person -> person.group, multiCollector)
    );
}

class Person {
    String name;
    int group;
    int age;

    // Contructor, getter and setter
}

class Data {
    long average;
    long sum;

    public Data(long average, long sum) {
        this.average = average;
        this.sum = sum;
    }

    // Getter and setter
}

Результатом должна быть Карта, которая связывает результат группировки как

1 => Data(average(18, 20, 30), sum(18, 20, 30))
2 => Data(average(30, 29), sum(30, 29))
3 => ....

Это прекрасно работает с одной функцией, такой как "Collectors.counting ()", но мне нравится связывать более одной (в идеале бесконечный из списка).

List<Collector<Person, ?, ?>>

Можно ли сделать что-то подобное?

Ответы на вопрос(0)

Ваш ответ на вопрос