当前位置: 首页 > news >正文

DoubleSummaryStatistics 及其相关类之-简介

1. DoubleSummaryStatistics 使用简介

在Java 8中,DoubleSummaryStatistics 类被引入作为 java.util 包的一部分。它是一个用于收集统计数据(如计数、最小值、最大值、和、平均值等)的类,特别适用于处理 double 类型的数据。

DoubleSummaryStatistics 是一个用于统计 double 值数据的类,能够同时计算出以下几个统计数据:

  • 总数(count)
  • 总和(sum)
  • 最小值(min)
  • 最大值(max)
  • 平均值(average)

它提供了一组方法用于更新和检索这些统计数据,并且与 Java 8 中的 Stream API 无缝集成。

2. 使用场景和优缺点

a. 使用场景
  1. 数据分析:在处理大量 double 类型数据时,使用 DoubleSummaryStatistics 可以轻松获取关键统计数据。
  2. 数据流处理:与 Stream API 结合使用,简化统计操作。
  3. 实时统计:在需要不断更新统计数据的实时系统中,DoubleSummaryStatistics 提供了便捷的方式。
b. 优点
  1. 简洁性:简化了统计数据的计算,避免手动编写累加器。
  2. 性能:适用于大数据集的处理,结合并行流使用时具有良好的性能。
  3. 易用性:提供了开箱即用的方法来获取统计数据。
c. 缺点
  1. 单一用途:主要用于 double 类型数据的统计,其他类型数据需要使用对应的类,如 IntSummaryStatisticsLongSummaryStatistics
  2. 内存占用:在处理极大数据集时,内存占用可能会增加。

3. 基本用法

创建 DoubleSummaryStatistics 对象,并使用 accept 方法添加数据,然后使用相应的方法获取统计结果。

import java.util.DoubleSummaryStatistics;public class BasicUsage {public static void main(String[] args) {// DoubleStream stats = DoubleStream.of(2.3, 3.5, 4.7, 5.6, 7.8);// DoubleSummaryStatistics stats = doubleStream.summaryStatistics();// 或DoubleSummaryStatistics stats = new DoubleSummaryStatistics();stats.accept(1.1);stats.accept(2.2);stats.accept(3.3);System.out.println("Count: " + stats.getCount());System.out.println("Sum: " + stats.getSum());System.out.println("Min: " + stats.getMin());System.out.println("Average: " + stats.getAverage());System.out.println("Max: " + stats.getMax());}
}

4. 详细使用案例

a. 收集基本统计数据

手动添加数据并收集统计结果。

import java.util.DoubleSummaryStatistics;public class BasicStatistics {public static void main(String[] args) {DoubleSummaryStatistics stats = new DoubleSummaryStatistics();double[] values = {1.1, 2.2, 3.3, 4.4, 5.5};for (double value : values) {stats.accept(value);}System.out.println("Count: " + stats.getCount());System.out.println("Sum: " + stats.getSum());System.out.println("Min: " + stats.getMin());System.out.println("Average: " + stats.getAverage());System.out.println("Max: " + stats.getMax());}
}
b. 结合 Stream 使用

使用 Stream API 直接收集统计数据。

import java.util.Arrays;
import java.util.DoubleSummaryStatistics;
import java.util.List;public class StreamStatistics {public static void main(String[] args) {List<Double> values = Arrays.asList(1.1, 2.2, 3.3, 4.4, 5.5);DoubleSummaryStatistics stats = values.stream().mapToDouble(Double::doubleValue).summaryStatistics();System.out.println("Count: " + stats.getCount());System.out.println("Sum: " + stats.getSum());System.out.println("Min: " + stats.getMin());System.out.println("Average: " + stats.getAverage());System.out.println("Max: " + stats.getMax());}
}
c. 并行流中的应用

利用并行流提高性能。

import java.util.Arrays;
import java.util.DoubleSummaryStatistics;
import java.util.List;public class ParallelStreamStatistics {public static void main(String[] args) {List<Double> values = Arrays.asList(1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.0);DoubleSummaryStatistics stats = values.parallelStream().mapToDouble(Double::doubleValue).summaryStatistics();System.out.println("Count: " + stats.getCount());System.out.println("Sum: " + stats.getSum());System.out.println("Min: " + stats.getMin());System.out.println("Average: " + stats.getAverage());System.out.println("Max: " + stats.getMax());}
}

5. 总结

DoubleSummaryStatistics 是一个强大的工具,用于收集 double 类型数据的统计信息。它简化了统计计算过程,与 Stream API 集成良好,适用于各种数据分析和流处理场景。虽然它主要适用于 double 类型数据,但对于大多数统计需求来说,这已经足够强大且易用。通过合理使用 DoubleSummaryStatistics,开发者可以显著提升代码的简洁性和性能。

6. 相关类

DoubleSummaryStatistics 类是 Java 8 引入的 java.util 包中的一个类,用于收集有关 double 数据的统计信息。它提供了一种方便的方式来计算数据流的计数、总和、最小值、最大值和平均值。与 DoubleSummaryStatistics 类似的类有:

a. IntSummaryStatistics

包名: java.util

功能: 收集 int 数据的统计信息,包括计数、总和、最小值、最大值和平均值。

IntSummaryStatistics intStats = new IntSummaryStatistics();
intStats.accept(1);
intStats.accept(2);
intStats.accept(3);
System.out.println(intStats.getAverage());
System.out.println(intStats.getSum());
b. LongSummaryStatistics

功能: 收集 long 数据的统计信息,包括计数、总和、最小值、最大值和平均值。

LongSummaryStatistics longStats = new LongSummaryStatistics();
longStats.accept(1L);
longStats.accept(2L);
longStats.accept(3L);
System.out.println(longStats.getAverage());
System.out.println(longStats.getSum());

7. 用法示例

这些类都实现了 Consumer 接口,因此可以与 Java 8 的流(Stream)API 一起使用。例如,使用 Stream 对象的 collect 方法,可以方便地将元素收集到这些统计类中。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);IntSummaryStatistics stats = numbers.stream().mapToInt(Integer::intValue).summaryStatistics();System.out.println("Average: " + stats.getAverage());
System.out.println("Sum: " + stats.getSum());
System.out.println("Min: " + stats.getMin());
System.out.println("Max: " + stats.getMax());
System.out.println("Count: " + stats.getCount());

8. 类似工具类的特点

这些统计类具有以下共同特点:

  • 统计数据: 提供计数、总和、最小值、最大值和平均值的统计信息。
  • 接口实现: 实现 Consumer 接口,可以方便地与流 API 一起使用。
  • 常用方法:
    • accept(value): 接受一个值并将其包含在统计中。
    • getCount(): 返回计数。
    • getSum(): 返回总和。
    • getMin(): 返回最小值。
    • getMax(): 返回最大值。
    • getAverage(): 返回平均值。

这些类在处理基本类型的集合数据时非常有用,简化了统计计算的代码。

http://www.lryc.cn/news/382415.html

相关文章:

  • java线程间的通信 - join 和 ThreadLocal
  • 差分GPS原理
  • 【栈与队列】前k个高频元素
  • B端产品竞品分析-总结版
  • 刷代码随想录有感(116):动态规划——单词拆分
  • CSS-0_1 CSS和层叠(样式优先级、内联样式、选择器 用户代理样式)
  • 科技赋能冷链园区:可视化带来全新体验
  • 高通安卓12-安卓系统定制2
  • 高中数学:数列-解数列不等式问题的常用放缩技巧(重难点)
  • [图解]企业应用架构模式2024新译本讲解17-活动记录1
  • [C++深入] --- malloc/free和new/delete
  • Spcok测试代码抛异常场景
  • 【漏洞复现】脸爱云一脸通智慧管理平台 SystemMng 管理用户信息泄露漏洞(XVE-2024-9382)
  • 新手如何入门Web3?
  • React.FC`<ChildComponentProps>`解释
  • 2024-06-24力扣每日一题
  • pyhon模块以及常用的第三方模块
  • shell脚本—快速修改centos网络配置
  • 线程池概念、线程池的不同创建方式、线程池的拒绝策略
  • 示例:WPF中如何绑定ContextMenu和Menu
  • 区块链小故事
  • Java | Leetcode Java题解之第167题两数之和II-输入有序数组
  • 项目训练营第三天
  • 计算机组成原理 | CPU子系统(1)基本概述
  • 无引擎游戏开发(2):最简游戏框架 | EasyX制作井字棋小游戏I
  • 排书 IDA*
  • playwright录制脚本原理
  • awk脚本监控
  • Python高压电容导电体和水文椭圆微分
  • 微信小程序 引入MiniProgram Design失败