Java8-`Summary Statics primitive types` 的创建及实例

68 阅读2分钟

在这篇博文中,我们将介绍java8中原始的汇总统计类的基础知识。

java8汇总统计简介

摘要统计是为了计算统计数据,如数字数据的计数、总和、最大、最小和平均操作。

在java8之前,这里有一些步骤可以得到汇总统计的和和平均操作:

  • 首先数字数据可能被迭代或循环
  • 将每个元素添加到一个临时变量中进行求和
  • 通过将总和除以元素的数量来返回平均数

这需要由开发人员来处理。你也可以使用apache库来实现同样的功能。

如何在Java 7中计算数字的总和和平均数?

例如,为了找到/计算数组的总和和平均数,我们必须写一段代码,如下。

import java.util.IntSummaryStatistics;
import java.util.stream.IntStream;

public class Java7SummaryStats {

    public static void main(String[] args) {
        double numberValues[] = { 10, 5, 5 };
        double sumOfNumbers = 0;
        for (double value : numberValues) {
            sumOfNumbers += value;
        }
        Double average =sumOfNumbers / numberValues.length;
        System.out.println("Sum:" + sumOfNumbers);
        System.out.println("Average:" + average);

    }
}

输出

Sum:20.0  
Average:6.666666666666667  

Java8使用流的总和和平均的例子

这是一个使用流计算数据数组的总和和平均数的例子,没有汇总统计学类的例子。创建流数组,将该流的每个元素传给mapToDouble() ,该函数输出双倍值,并调用终端操作sum和average。


import java.util.Arrays;
import java.util.OptionalDouble;

public class summaryStats {

    public static void main(String[] args) {
        Double numberValues[] = { 10d, 5d, 5d };
        OptionalDouble averageOptionalDouble = Arrays.stream(numberValues)
                .mapToDouble(Double::doubleValue).average();
        double sumOfNumbers = Arrays.stream(numberValues).mapToDouble(Double::doubleValue)
                .sum();
        System.out.println("Sum:" + sumOfNumbers);
        System.out.println("Average:" + averageOptionalDouble.getAsDouble());
    }
}

输出为

Sum:20.0  
Average:6.666666666666667  

原始数字汇总统计实例

java8在Java.util 包中引入了三个类来获得汇总统计。它通过引入新的类来简化计算原始数字类型的汇总统计。

这些类被设计用来操作java8的新特性--流和lambda表达式。这些实现类并不是线程安全的。

有了汇总统计类,同样的代码可以用更少的行来简化。DoubleSummaryStatistics 类是计算双倍数据的统计操作。这与java8的Streams一起工作。

  • 首先,创建一个流的数组。
  • 这个数据流通过Collectors.sumplizingDouble传递给收集方法,并返回DoubleSummaryStatistics对象。这个对象包含了所有的操作结果,并将其包裹起来。

下面的代码是另一种计算双数组的总和和平均数的方法。


import java.util.Arrays;
import java.util.DoubleSummaryStatistics;
import java.util.stream.Collectors;

public class DoubleSummaryStatisticsExample {

    public static void main(String[] args) {
        Double numberValues[] = { 10d, 5d, 5d };

        DoubleSummaryStatistics stats = Arrays.stream(numberValues).collect(
                Collectors.summarizingDouble(Double::doubleValue));
        System.out.println(stats.getSum());
        System.out.println(stats.getAverage());
        System.out.println(stats);

    }

}

输出

Sum:20.0  
20.0  
6.666666666666667  
DoubleSummaryStatistics{count=3, sum=20.000000, min=5.000000, average=6.666667, max=10.000000}  

结论

通过实例学习了Summary Statics primitive types 对象的创建和方法的使用。