组合器未在Java Stream Reducer

时间:2015-11-25 12:10:59

标签: java java-8 java-stream reduce reducers

有一些问题涉及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,因为我得到了我想要的结果 - 所有人的年龄总和,但我很好奇它为什么不执行。您是否知道如何使用它,即如何使其实际执行?

0 个答案:

没有答案