Java IntSummaryStatistics的summaryStatistics方法
为什么空IntStream上的summaryStatistics()方法返回整数的最大值和最小值作为流中存在的最大值和最小值Java IntSummaryStatistics的summaryStatistics方法,java,java-8,functional-programming,java-stream,Java,Java 8,Functional Programming,Java Stream,为什么空IntStream上的summaryStatistics()方法返回整数的最大值和最小值作为流中存在的最大值和最小值 IntStream intStream = IntStream.of(); IntSummaryStatistics stat = intStream.summaryStatistics(); System.out.println(stat); 输出: IntSummaryStatistics{count=0, sum=0, min=2147483647, aver
IntStream intStream = IntStream.of();
IntSummaryStatistics stat = intStream.summaryStatistics();
System.out.println(stat);
输出:
IntSummaryStatistics{count=0, sum=0, min=2147483647, average=0.000000, max=-2147483648}
此行为记录在Javadoc中,因此根据定义,这是正确的行为: int java.util.IntSummaryStatistics.getMin() 返回记录的最小值,如果未记录任何值,则返回Integer.MAX_值 返回: 最小值,如果没有,则为Integer.MAX\u值 及 int java.util.IntSummaryStatistics.getMax() 返回记录的最大值,如果未记录任何值,则返回Integer.MIN_值 返回: 最大值,如果没有,则为Integer.MIN_值 至于“返回这些值有什么意义”,我们可以说,空
流
的最小值应该是这样的:如果流
有任何元素,该元素将小于该值
类似地,我们可以认为空
流
的最大值应该是这样的:如果流
有任何元素,那么该元素将大于该值。因为列表是空的,这些方法返回的是实际值,而不是可选值
,所以它假定为完整的整数范围。否则它将返回一个空的可选
请参见和文档,在没有记录任何值时,这里描述了这种确切的行为
这是明智的返回这些角落的情况。
我将在这里解释这种行为IntSummaryStatistics.getMin()
示例:让我们假设列表至少包含一个条目。无论该条目的整数值是什么,它都不会大于integer.MAX\u value
。因此,在没有条目的情况下返回此值是有意义的,以便为用户提供洞察力
对于
IntSummaryStatistics.getMax()
来说,在通常将默认值初始化为Integer.MAX\u值的任何数组中查找最小int
值也是如此
int min = Integer.MAX_VALUE;
for (int i : somearray) {
if (i < min) {
min = i;
}
}
return min;
int min=Integer.MAX\u值;
for(int i:somearray){
如果(i
因此,如果没有要迭代的内容,将返回默认值min
。对于
max,默认的max
初始化为Integer.MIN\u值
空集的最小值是多少?我想说,在这种情况下,没有任何值是正确的。这有什么错?这就是他们决定表示“未知”值的方式不要忘记IntStream
和IntConsumer
(由IntSummaryStatistics
扩展)处理原语int
,如果以某种方式从getMin()
返回可选值,这将与API的设计目的(专门化)相矛盾。另一方面,有一种解决方法,您可以根据您可能希望作为整数值的自定义逻辑实现的条件创建自己的IntegerSummaryStatistics
。但如果值得的话,明智地做出决定。
int min = Integer.MAX_VALUE;
for (int i : somearray) {
if (i < min) {
min = i;
}
}
return min;