Java IntSummaryStatistics的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上的summaryStatistics()方法返回整数的最大值和最小值作为流中存在的最大值和最小值

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;