在这篇博文中,我们将介绍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 对象的创建和方法的使用。