繁体   English   中英

IntSummaryStatistics的summaryStatistics方法

[英]summaryStatistics Method of IntSummaryStatistics

为什么空 IntStream 上的 summaryStatistics() 方法返回 integer 的最大值和最小值作为 stream 中存在的最大和最小 int 值?

IntStream intStream = IntStream.of();
IntSummaryStatistics stat = intStream.summaryStatistics();
System.out.println(stat);  

Output

IntSummaryStatistics{count=0, sum=0, min=2147483647, average=0.000000, max=-2147483648}
  1. 返回这些值有什么意义?
  2. 它不应该考虑错误的结果吗?

请参阅IntSummaryStatistics.getMax()IntSummaryStatistics.getMin()文档,当没有记录值时,此处描述了这种确切的行为。

在这些极端情况下返回这些是明智的。 我将在这里解释这种行为IntSummaryStatistics.getMin()

示例:假设列表至少包含一个条目。 无论该条目的 integer 值是什么,它都不会大于Integer.MAX_VALUE 因此,当没有条目时返回此值是有意义的,以便为用户提供洞察力。

IntSummaryStatistics.getMax()也是如此

此行为记录在 Javadoc 中,因此根据定义这是正确的行为:

int java.util.IntSummaryStatistics.getMin()

返回记录的最小值,如果没有记录值,则返回 Integer.MAX_VALUE。

回报:

最小值,如果没有,则为 Integer.MAX_VALUE

int java.util.IntSummaryStatistics.getMax()

返回记录的最大值,如果没有记录任何值,则返回 Integer.MIN_VALUE。

回报:

最大值,如果没有,则为 Integer.MIN_VALUE

至于“返回这些值的意义何在”,我们可以争辩说,空Stream的最小值应该是这样的,即如果Stream有任何元素,则该元素将小于该值。

同样,我们可以争辩说,空Stream的最大值应该是这样的,即如果Stream有任何元素,则该元素将大于该值。

要在任何数组中找到minimum int值,通常将默认值初始化为Integer.MAX_VALUE

int min = Integer.MAX_VALUE;

for (int i : somearray) {
   if (i < min) {
     min = i;
   }
}

return min;  

因此,如果没有要迭代的内容,则将返回默认min的值。 对于最大值,默认max初始化为Integer.MIN_VALUE

由于列表为空并且这些方法返回一个实际值而不是Optional<Integer>它假定完整的 Integer 范围。 否则它将返回一个空的Optional<Integer>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM