国际汇总统计的汇总统计方法



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

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

输出

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

请参阅IntSummaryStatistics.getMax((和IntSummarytatistics.getMin((文档,当没有记录值时,会在其中描述这种确切的行为。

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

示例:假设列表至少包含一个条目。无论该条目的整数值是多少,它都不会大于Integer.MAX_VALUE。因此,在没有条目的情况下返回这个值是有意义的,可以让用户了解情况。

IntSummaryStatistics.getMax()也是如此

这个行为记录在Javadoc中,所以根据定义,这是正确的行为:

int java.util.IntSummaryStatistics.getMin((

返回记录的最小值或Integer。如果没有记录任何值,则为MAX_VALUE。

退货:

最小值或Integer。如果没有,则最大值

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,则默认的max被初始化为Integer.MIN_VALUE

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

最新更新