summarizingInt和Collectors.summarizingInt之间的区别?

时间:2016-12-06 07:25:58

标签: java java-8 java-stream collectors

我正在使用IntSummaryStatistics类来计算我班级的统计数据。 我搜索了三种计算统计数据的特殊方法。这是我的代码:

IntSummaryStatistics stats1 = orderEntries.stream()
            .mapToInt((x) -> x.getAmount()).summaryStatistics();

IntSummaryStatistics stats2 = orderEntries.stream().collect(
            Collectors.summarizingInt(o -> o.getAmount()));

IntSummaryStatistics istats2 = orderEntries.stream().
                            collect( 
                                    () -> new IntSummaryStatistics(),
                                    (i,o) -> i.accept(o.getAmount()),
                                    (i1, i2) -> i1.combine(i2));
IntSummaryStatistics istats = IntStream.of(51,22,50,27,35).
        collect(IntSummaryStatistics::new, IntSummaryStatistics::accept, 
                IntSummaryStatistics::combine);

哪一个更好的方法?我们应该优先考虑哪一个?

1 个答案:

答案 0 :(得分:4)

我选择:

IntSummaryStatistics stats = orderEntries
    .stream()
    .collect(Collectors.summarizingInt(OrderEntry::getAmount));

此选项:

IntSummaryStatistics istats = IntStream.of(51,22,50,27,35).
            collect(IntSummaryStatistics::new, IntSummaryStatistics::accept, 
                    IntSummaryStatistics::combine);

是最糟糕的,它正是IntStream.summaryStatistics所做的,只是明确写出来的。所以第一种选择没有优势。

我会稍微修改第二个选项,因为收集器更能代表业务操作"订单输入金额的汇总"从我的角度来看。