java8 - java.util.DoubleSummaryStatistics类示例

334 阅读3分钟

在这篇博文中,我们将通过实例来探讨DoubleSummaryStatistics类和方法。

Java8的DoubleSummaryStatistics类

DoubleSummaryStatistics是创建状态对象的类之一,用于计算统计操作,如双倍数据的和、最大、最小、平均和计数。

DoubleSummaryStatistics是针对定义在java.util包中Double数据类型。还有其他一些类,如 IntSummaryStatistics 用于整数数据类型,LongSummaryStatistics用于长数据类型

这些对象可以以多种方式被创建和使用。以下是获得这些对象的方法。

DoubleSummaryStatistics接受方法示例

下面的代码是为了计算数字双倍值的汇总统计。这是在java中获取汇总统计数据的方法之一。

这里accept()方法被用来添加数值以计算统计值。这需要Double作为一个参数。

DoubleSummaryStatistics statsPrimitive = new DoubleSummaryStatistics();  
statsPrimitive.accept(10.0);  
statsPrimitive.accept(50.0);  
statsPrimitive.accept(2.0);  
statsPrimitive.accept(3.0);  
statsPrimitive.accept(20.0);   
System.out.println(statsPrimitive); 

上述代码的输出是

DoubleSummaryStatistics{count=5, sum=85.000000, min=2.000000, average=17.000000, max=50.000000} 

DoubleSummaryStatistics对象示例

首先使用java9中引入的of()因子静态方法创建一个List。这是为有限的数据集创建一个未经修改的集合并返回列表的方法之一。请看List.of()方法使用List.Stream()方法从List of Objets创建一个流。将给定的对象流应用于mapToDouble()方法,该方法将ToDoubleFunction作为输入参数。请点击ToDoubleFunction功能接口了解更多信息。流中的每个元素被映射并使用Lambda表达式转换为Double值 最后调用summarystatistics()方法来返回统计数据的状态对象。

import java.util.DoubleSummaryStatistics;  
import java.util.List;  
public class Summary2 {  
 public static void main(String[] args) {  
  List empLists=List.of(new Employee(5000),new Employee(2000),new Employee(21000),new Employee(2500));  
     DoubleSummaryStatistics sumaryStats = empLists.stream()  
             .mapToDouble((value) -> value.getSalary()).summaryStatistics();  
     System.out.println(sumaryStats);  
 }  
}  
class Employee {  
  
    double salary;  
  
    public Employee(double salary) {  
        super();  
        this.salary = salary;  
    }  
  
    public double getSalary() {  
        return salary;  
    }  
} 

上述代码的输出是

DoubleSummaryStatistics{count=4, sum=30500.000000, min=2000.000000, average=7625.000000, max=21000.000000}

DoubleStream summaryStatistics()方法示例

还有一种方法可以使用DoubleStream summaryStatistics()方法来计算统计数据

DoubleStream doubleStream = DoubleStream.of(5.0, 4.0, 1.0, 7.0, 3.0);  
DoubleSummaryStatistics summaryStats = doubleStream.summaryStatistics();  
System.out.println(summaryStats);

输出是

DoubleSummaryStatistics{count=5, sum=20.000000, min=1.000000, average=4.000000, max=7.000000}

首先,使用DoubleStream.of()方法创建一个双流。DoubleStream是一个流类,用于对原始的双倍数据进行顺序和并行操作。它是java8中的双倍版流类。调用doubleStream.summaryStatistics()方法来获得DoubleSummaryStatistics对象,该对象具有双倍数据的摘要数据,如计数、总和、最小、平均和最大。这是流API的还原操作,接收输入的数值数组,并给出数据摘要的输出。

Collectors.sumplizingDouble() 是java.util.stream包中定义的一个静态方法。语法

 Collector summarizingDouble(ToDoubleFunction mapper)

summarizingDouble方法将ToDoubleFunction作为一个输入参数。ToDoubleFunctionjava.util.function包中提供的一个功能接口。这些功能接口将对象转换为原始的双倍数。请看更多关于ToDoubleFunction的信息 它返回java.util.stream.Collectors,通过将每个元素映射到Function,将每个元素转换为Double,并返回DoubleSummaryStatistics类

List list = Arrays.asList(5.0, 4.0, 1.0, 7.0, 3.0);  
DoubleSummaryStatistics summaryStats1 = list.stream().collect(Collectors.summarizingDouble(Double::doubleValue));  
System.out.println(summaryStats1);

上述代码的输出是

DoubleSummaryStatistics{count=5, sum=20.000000, min=1.000000, average=4.000000, max=7.000000}

首先通过使用Arrays.asList()方法创建一个Double列表。
使用list.stream()方法将列表转换为流,这将返回对象的流。将这个数据流应用于还原运算器collect()方法,该方法采用了总结收集器方法-Collectors*.sumplizingDouble(),这将计算并返回封装在DoubleSummaryStatistics对象*中的数据。

DoubleSummaryStatistics方法

以下是由java支持的内置方法。

方法:

说明

accept(double):

为汇总操作添加双倍值,不返回。

Combine(DoubleSummaryStatistics):

将其他摘要统计对象合并到此。

getAverage():

返回数值的平均值或中值,如果不存在任何数值则返回0。

getCount():

返回增加的数值的数量

getMax():

返回双倍值列表中的最大值。如果添加了NaN值,返回NaN,如果没有添加值,返回Double.NEGATIVE_INFINITY值

getMin():

从一个双数列表中返回最小值。如果添加了NaN值,则返回NaN,如果没有添加任何值,则返回Double.POSITIVE_INFINITY值。

getSum():

返回列表中所有双倍值的总和,如果没有添加任何值,则返回零。