XXXSummaryStatistics java-10中的新构造函数

Eug*_*ene 7 java java-stream java-10

我看到,java-10增加了一个构造函数IntSummaryStatistics(LongSummaryStatisticsDoubleSummaryStatistics)这4个参数是count,min,maxsum.

我理解为什么no-args构造函数存在,所以它将用于简化,如:

 ..stream().collect(Collectors.summarizingInt(Class::someFunction))
Run Code Online (Sandbox Code Playgroud)

这是有道理的,但为什么需要添加带有4个参数的构造函数?(我在自己的答案中做了一个假设,但如果不是这样的话,我很乐意收回它.)

Eug*_*ene 5

我试图搜索源代码,如果这些构造函数在某个地方使用,我不能.

所以我唯一的想法是它用于手动构造这样的Object.假设我们有一个计算所有这些平均值,最小值,最大值,计数的方法,而不是返回array/List4个参数,你可以返回一个IntSummaryStatistics,以前这是不可能的.所以,我想,这只是扩展了API而没有(还有?)任何内部用法.


相对CSR精确: -

问题:无法*SummaryStatistics从其记录的值重建.例如,"克隆"或以连续形式传播并重构.

解决方案:添加构造函数以*SummaryStatistics接受预先记录的状态.

  • 正确.其基本原理如下:https://bugs.openjdk.java.net/browse/JDK-8178117 (4认同)

Hol*_*ger 3

请注意,虽然今天的参考实现中没有发生这样的优化,但类似的操作IntStream.rangeClosed(from, to).summaryStatistics()不需要实际迭代所有值。

\n\n

它可以简单地返回
\n new IntSummaryStatistics((long)to-from+1, from, to, ((long)from+to)*((long)to-from+1)/2)

\n\n

如前所述,这种优化今天不会发生,但这是一个例子,有时,有一些方法可以计算这样的统计数据,而不必迭代每个值,因此填充 xxxSummaryStatistics 的唯一方法是计算单个值,这是一个很大的accept\xe2\x80\x8b限制(并且combine,但这需要一个已经存在的统计实例,并且必须以某种方式填充)。

\n