summarizingInt 和 Collectors.summarizingInt 之间的区别?

Difference between summarizingInt and Collectors.summarizingInt?

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

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);

哪种方法更好?我们应该更喜欢哪一个?

我会选择:

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 所做的,只是明确地写出来了。所以第一个选项没有优势。

我会选择稍作修改的第二个选项,因为从我的角度来看,收集器更能代表业务运营"summarization of order entry amounts"。