首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java-10中的XXXSummaryStatistics新构造函数

java-10中的XXXSummaryStatistics新构造函数
EN

Stack Overflow用户
提问于 2018-03-05 08:46:38
回答 3查看 171关注 0票数 7

我看到java-10IntSummaryStatistics (LongSummaryStatisticsDoubleSummaryStatistics)添加了一个构造函数,该构造函数包含4个参数,即countminmaxsum

我理解为什么存在no-args构造函数,以便将其用于精简,例如:

代码语言:javascript
复制
 ..stream().collect(Collectors.summarizingInt(Class::someFunction))

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-06 09:22:54

请注意,虽然这样的优化在引用实现中今天并不发生,但像IntStream.rangeClosed(from, to).summaryStatistics()这样的操作并不需要对所有值进行实际迭代。

它可以简单地返回

new IntSummaryStatistics((long)to-from+1, from, to, ((long)from+to)*((long)to-from+1)/2)

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

票数 3
EN

Stack Overflow用户

发布于 2018-03-05 08:46:38

如果在某个地方使用了这些构造函数,我尝试过搜索源代码,但我不能。

所以我唯一的想法是,它是用来手工构造这样一个对象的。假设我们有一个计算所有这些平均值、最小值、最大值、计数的方法,而不是返回一个由4个参数组成的array/List,您可以返回一个IntSummaryStatistics,以前这是不可能的。所以,我想,这只是扩展了API,而没有(还没有?)任何内部用途。

来自相对CSR的精确信息:-

Problem:不可能从它的记录值重建*SummaryStatistics。例如,被“克隆”或以串行形式传送并重组。

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

票数 5
EN

Stack Overflow用户

发布于 2018-03-05 12:04:18

除了使用这样一个构造函数(需要)的答案之外,为了关心API实现的正确性,人们应该真正考虑到大声的API说明,这样创建这类事例就像(强调我的)一样受到一些深思熟虑的考虑-

如果count为零,则将忽略其余的参数,并构造一个空实例。

例子-

代码语言:javascript
复制
var intsummstats = new IntSummaryStatistics();
// creates the following stat
=> IntSummaryStatistics{count=0, sum=0, min=2147483647, average=0.000000, max=-2147483648}

// and the  following results into a similar stat as well
var anotherintsummstats = new IntSummaryStatistics(0, 12, 100, 1000);
=> IntSummaryStatistics{count=0, sum=0, min=2147483647, average=0.000000, max=-2147483648}

如果参数不一致,则抛出IllegalArgumentException必需的一致参数条件是:

  • 计数>= 0
  • 最小<=最大值

但是,由于这并不包括对用户可以输入的值的countsummaxmin组合的所有类型的检查,所以有这样的语句(我在处理构造函数时发现了这个语句)。

参数正确性的强制执行意味着从*SummaryStatistics源实例检索到的记录值集可能不是此构造函数的合法参数集,因为源记录的值计数的算术溢出。一致的参数条件不足以阻止创建内部不一致的实例。这种状态的一个例子是一个(IntSummaryStatistics)实例,它具有: count = 2,min = 1,max =2和sum = 0。

另外,当combine(http://download.java.net/java/jdk10/docs/api/java/util/IntSummaryStatistics.html#combine(java.util.IntSummaryStatistics%29)d和其他*SummaryStatistic )可能进一步导致非法的参数集时,这种错误创建的实例。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49106467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档