我正在使用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);
哪一个更好的方法?我们应该优先考虑哪一个?
答案 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
所做的,只是明确写出来的。所以第一种选择没有优势。
我会稍微修改第二个选项,因为收集器更能代表业务操作"订单输入金额的汇总"从我的角度来看。