java8中原始的汇总统计类的基础知识介绍

140 阅读2分钟

在这篇博文中,我们将介绍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}