Комбинатор не выполняется в Java Stream Reducer

Есть несколько вопросов, которые касаются объяснения Combiner в Java Stream Reducer. Тем не менее, я не мог заставить его исполниться вообще. Единственный результат, который я получаю, это результат, полученный Аккумулятором. Пример кода ниже:

public class Main {

    public static void main(String[] args) throws Exception {
        List<Person> persons =
            Arrays.asList(
                new Person("Max", 18),
                new Person("Peter", 23),
                new Person("Pamela", 23),
                new Person("David", 12));

            Integer ageSum = persons.stream()
                              .reduce(0,
                                      (sum, p) -> { 
                                        System.out.format("accumulator: sum=%s; person=%s\n", sum, p);
                                        return sum += p.age;
                                      },
                                      (sum1, sum2) -> {
                                        System.out.format("combiner: sum1=%s; sum2=%s\n", sum1, sum2);
                                        return sum1 + sum2; // (1)
                                        // return 0;        // (2)
                                      }
                                     );

            System.out.println(ageSum);
    }

}

class Person {
    String name;
    int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return name;
    }
}

В результате я всегда получаю 76, независимо от того, какую строку я оставляю без комментария (1) или (2). Я не вижу вывод, произведенный System.out.format или. Не то чтобы мне нужен этот комбинатор сейчас, так как я получил желаемый результат - сумму возрастов всех людей, но мне любопытно, почему он не выполняется. У вас есть идея, как его использовать, то есть как заставить его действительно выполняться?

0 ответов

Другие вопросы по тегам