当前位置: 首页 > 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(): 返回平均值。

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

相关文章:

DoubleSummaryStatistics 及其相关类之-简介

1. DoubleSummaryStatistics 使用简介 在Java 8中&#xff0c;DoubleSummaryStatistics 类被引入作为 java.util 包的一部分。它是一个用于收集统计数据&#xff08;如计数、最小值、最大值、和、平均值等&#xff09;的类&#xff0c;特别适用于处理 double 类型的数据。 Do…...

java线程间的通信 - join 和 ThreadLocal

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…...

差分GPS原理

双差RTK&#xff08;Real-Time Kinematic&#xff09;算法是基于差分全球卫星导航系统&#xff08;GNSS&#xff09;技术的一种高精度定位方法。它利用至少两个接收机&#xff08;一个为基站&#xff0c;其他为移动站&#xff09;接收自同一组卫星的信号来实现精确测量。双差处…...

【栈与队列】前k个高频元素

题目&#xff1a;给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 分析&#xff1a;首先我们需要计算数组中元素出现的频率&#xff0c;前几篇文章讲解了哈希表的应用&#xff0c;所以这里我们很容易想到用…...

B端产品竞品分析-总结版

B端竞品分析的难点 分析维度-业务逻辑复杂 B端产品与C端产品业务模型不同&#xff0c;B端产品主要以业务为导向&#xff0c;因此其业务流程与业务逻辑梳理起来也会较C端产品复杂的多&#xff0c;对于个人能力也有一定的要求&#xff0c;需要我们具备相关领域或行业专业知识。…...

刷代码随想录有感(116):动态规划——单词拆分

题干&#xff1a; 代码&#xff1a; class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string>set(wordDict.begin(), wordDict.end());vector<bool>dp(s.size() 1, false);dp[0] true;for(int j 0; j &…...

CSS-0_1 CSS和层叠(样式优先级、内联样式、选择器 用户代理样式)

CSS 的本质就是声明规则 ——《深入解析CSS》 文章目录 CSS层叠和优先级用户代理样式请和用户代理样式和谐相处 选择器单选择器的优先级选择器组的优先级关于选择器的其他源码顺序尽可能的选择优先级低的选择器 内联样式内联样式和JavaScript !important多个 !important 碎碎念…...

科技赋能冷链园区:可视化带来全新体验

应用图扑可视化技术&#xff0c;冷链园区能够更加直观地监控和管理资源&#xff0c;优化运作流程&#xff0c;提高运营效率与服务质量。...

高通安卓12-安卓系统定制2

将开机动画打包到system.img里面 在目录device->qcom下面 有lito和qssi两个文件夹 现在通过QSSI的方式创建开机动画&#xff0c;LITO方式是一样的 首先加入自己的开机动画&#xff0c;制作过程看前面的部分 打开qssi.mk文件&#xff0c;在文件的最后加入内容 PRODUCT_CO…...

高中数学:数列-解数列不等式问题的常用放缩技巧(重难点)

一、放缩技巧 技巧1 例题 证明&#xff1a;Sn&#xff1c;1 解&#xff1a; 变形 解&#xff1a; 由于第一种情况&#xff0c;我们证明了Sn&#xff1c;1&#xff0c;n≥1&#xff0c;是从第一项就开始放缩的。 发现&#xff0c;无法精确到 3 4 \frac{3}{4} 43​ 这时&am…...

[图解]企业应用架构模式2024新译本讲解17-活动记录1

1 00:00:01,070 --> 00:00:04,180 下一个我们要说的就是 2 00:00:04,190 --> 00:00:06,740 活动记录模式了 3 00:00:07,640 --> 00:00:11,210 同样是数据源架构模式 4 00:00:12,300 --> 00:00:18,480 里面的一个&#xff0c;活动记录 5 00:00:18,490 --> 00…...

[C++深入] --- malloc/free和new/delete

1 new运算符的拓展 1.1 自由存储区与堆的概念 在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区。 自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。 new操作符从自由存储区(free st…...

Spcok测试代码抛异常场景

测试代码抛异常场景 ‍ class ExceptionSpec extends Specification {def validateService new ValidateService()Unrolldef "验证UserInfo"() {when: "调用校验方法"validateService.validateUser(user)then: "捕获异常并设置需要验证的异常值&qu…...

【漏洞复现】脸爱云一脸通智慧管理平台 SystemMng 管理用户信息泄露漏洞(XVE-2024-9382)

0x01 产品简介 脸爱云一脸通智慧管理平台是一套功能强大&#xff0c;运行稳定&#xff0c;操作简单方便&#xff0c;用户界面美观&#xff0c;轻松统计数据的一脸通系统。无需安装&#xff0c;只需在后台配置即可在浏览器登录。 功能包括:系统管理中心、人员信息管理中心、设备…...

新手如何入门Web3?

一、什么是Web3&#xff1f; Web3是指下一代互联网&#xff0c;它基于区块链技术&#xff0c;致力于将各种在线活动变得更加安全、透明和去中心化。Web3是一个广义的概念&#xff0c;涵盖了包括数字货币、去中心化应用、智能合约等在内的多个方面。它的主要特点包括去中心化、…...

React.FC`<ChildComponentProps>`解释

代码场景 ParentComponent.tsx import React, { useState } from react; import ChildComponent from ./ChildComponent;function ParentComponent() {const [childData, setChildData] useState<string>();const handleChildData (data: string) > { // 可以直接…...

2024-06-24力扣每日一题

链接&#xff1a; 503. 下一个更大元素 II 题意 循环数组&#xff0c;找出每个元素的往后最近且大于它的元素 解&#xff1a; 今天没试暴力啊&#xff0c;大概率是过不了的 思路就是先找到最大的数&#xff0c;最大数的结果肯定是-1&#xff0c;然后倒着遍历数组&#xf…...

pyhon模块以及常用的第三方模块

import my_info as info print(info.name) info.show()from my_info import * print(name) show() pyhon中包的导入 import admin.my_admin as ad # 包名.模块名 admin是包名&#xff0c;my_admin是模块名print(ad.name) print(ad.info())from admin import my_admin as ad # …...

shell脚本—快速修改centos网络配置

shell-文本中自行修改想要的配置 #!/bin/bash# 网卡名称 eth"eth0"# IP 地址 ipaddr"192.168.1.100"# 子网掩码 netmask"255.255.255.0"# 网关 gateway"192.168.1.1"# 写入配置文件 echo "BOOTPROTOstatic" > /etc/sysc…...

线程池概念、线程池的不同创建方式、线程池的拒绝策略

文章目录 &#x1f490;线程池概念以及什么是工厂模式&#x1f490;标准库中的线程池&#x1f490;什么是工厂模式&#xff1f;&#x1f490;ThreadPoolExecutor&#x1f490;模拟实现线程池 &#x1f490;线程池概念以及什么是工厂模式 线程的诞生是因为&#xff0c;频繁的创…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...