在这篇博文中,我们将介绍java8中原始的汇总统计类的基础知识。
java8汇总统计简介
摘要统计是计算统计数据,如数字数据的计数、总和、最大、最小和平均操作。在java8之前,这里有一些步骤可以得到汇总统计的和和平均操作:
- 首先数字数据可能被迭代或循环
- 将每个元素添加到一个临时变量中进行求和
- 平均数将通过将总和与若干元素相除来返回
这需要由开发人员来处理。你也可以使用apache库来实现同样的功能。
Java 7汇总统计示例
例如,为了找到/计算数字数组的总和和平均数,我们必须写一段代码,如下所示。
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
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中,通过引入新的类来计算原始数值类型的汇总统计信息,从而简化了计算过程。
IntSummaryStatistics类--用于整数数据类型。
LongSummaryStatistics类-- 用于长数据类型
DoubleSummaryStatistics类--用于双数据类型。
这些类被设计用来操作java8的新特性--流和lambda表达式。这些实现类并不是线程安全的。
使用Summary Statistics类,同样的代码可以用更少的行来简化。DoubleSummaryStatistics类是用来计算统计运算的。这与java8的Streams一起工作。
- 首先,创建一个流的数组。
- 这个数据流通过Collectors.sumplizingDouble传递给收集方法,并返回DoubleSummaryStatistics对象。这个对象包含了所有的操作结果,并将其包裹起来。
下面的代码是计算双数组的总和和平均数的另一种方法
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}