Комбинатор не выполняется в 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
или. Не то чтобы мне нужен этот комбинатор сейчас, так как я получил желаемый результат - сумму возрастов всех людей, но мне любопытно, почему он не выполняется. У вас есть идея, как его использовать, то есть как заставить его действительно выполняться?