有一些问题涉及Java Stream Reducer中对Combiner的解释。但是,我根本无法执行它。我得到的唯一结果是由累加器产生的结果。示例代码如下:
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
产生的输出。不是我现在需要这个Combiner,因为我得到了我想要的结果 - 所有人的年龄总和,但我很好奇它为什么不执行。您是否知道如何使用它,即如何使其实际执行?