当前位置:首页 > 文章列表 > 文章 > java教程 > Java DoubleSummaryStatistics 怎样合并分片统计结果

Java DoubleSummaryStatistics 怎样合并分片统计结果

来源:17golang原创 2026-10-29 17:49:09 0浏览 收藏

Java DoubleSummaryStatistics通过total.combine(part)把分片状态累积到total。先为每片创建独立统计对象,再创建一个空的总对象,按片各合并一次,最后读取总count、sum、min、max和average。combine修改接收者,返回void,不能把它当成返回新统计对象的函数。

官方地址:https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/DoubleSummaryStatistics.html

先保护统计口径和分片身份

假设一组指标被拆成两片,一片两项、一片一项。合并要保护的首先是统计正确性:每条样本只属于一个分片,各片使用相同单位与过滤规则,同一分片只计入一次。本文借用风险分析的顺序讨论这些问题,不把普通数值聚合误说成存在某个已知安全漏洞。

风险后果处理责任
重复分片计数和总和重复累积业务接收层记录分片身份
直接平均片均值忽略片大小保留统计对象整体合并
并发写同一对象共享可变状态竞争分片隔离,汇总串行

用独立总对象逐片合并

以下完整Java示例使用互不重叠的数据,并把有限数作为业务输入约定。代码未在本文环境运行,没有实测输出。

import java.util.DoubleSummaryStatistics;

public class ShardStatistics {
    static DoubleSummaryStatistics summarize(double[] values) {
        DoubleSummaryStatistics stats = new DoubleSummaryStatistics();
        for (double value : values) {
            // 示例业务只接受有限值,拒绝策略在分片阶段统一
            if (!Double.isFinite(value)) {
                throw new IllegalArgumentException("统计值必须为有限数");
            }
            stats.accept(value);
        }
        return stats;
    }

    public static void main(String[] args) {
        DoubleSummaryStatistics first = summarize(new double[]{2.0, 4.0});
        DoubleSummaryStatistics second = summarize(new double[]{9.0});

        // 独立总对象,避免把某个分片本身当作累计结果
        DoubleSummaryStatistics total = new DoubleSummaryStatistics();
        total.combine(first);
        total.combine(second);

        // 读取总统计字段;示例未在本文环境执行
        System.out.println("count=" + total.getCount());
        System.out.println("sum=" + total.getSum());
        System.out.println("average=" + total.getAverage());
        System.out.println("min=" + total.getMin());
        System.out.println("max=" + total.getMax());
    }
}

从示例数据直接计算,count应为3、sum为15、min为2、max为9、average为5。两个片均值分别为3和9,若直接相加再除以2则是6,这不是所有样本的平均值。保留片统计对象,可以避免自行拼凑不完整汇总信息。

分片统计与独立总对象的关联
静态说明图:两个片统计共同关联总对象,combine对应状态合并关系,不是运行步骤或实测结果。

把重复计入和共享修改挡在合并前

combine只接收另一个统计对象,没有分片ID参数。它不负责判断该片是否已经处理,重复调用不会自动变成幂等操作。接收层应以任务ID、分片ID和数据范围识别重复;重试不能不加区分地再次累积。

示例在同一线程内汇总已经完成的片。官方说明该类不是线程安全的;并行流的收集可以依靠框架提供的分区、隔离和合并机制,但这不意味着多个自建线程可以共同accept或combine同一个实例。合并期间也不要让生产者继续修改源分片。官方线程与combine契约

不要把total设为first后又遍历全部分片,把first再次加进去。独立空总对象让“哪些片已经加入”更容易理解,也避免调用方误以为first仍只是原片统计。

处理空片和非有限数值

默认构造得到空统计对象,读取前应以count判断是否有样本。空片不应被解释成“观察到一个零值”;展示层也不应只依据average判断有没有数据。NaN和无穷值需要明确业务策略,示例选择拒绝,而不是静默过滤造成片间口径不一致。

double加法受运算顺序与舍入影响,分片组织和合并顺序可能影响末位精度。不能把数学上可合并推导为任意分组逐位相同,也不应用这类统计结果替代需要十进制精确计算的业务模型。

分片身份、输入口径和汇总记录关系
静态说明图:分片身份与输入规则关联到汇总责任,记录字段用于解释数据来源,不是已执行的审计结果。

留下可定位的分片记录

汇总层可记录任务标识、分片标识、样本数量、过滤策略及是否已计入。重算时从片记录重建总对象,比在不明确已累积内容的旧对象上补加更容易解释。记录数据来源不等于记录全部原始敏感数值,字段应按实际需要选择。

  • 分片范围不重叠,单位和输入策略相同。
  • 每片完成后才交给汇总层。
  • 每片只combine一次,总对象不复用为某一原片。
  • 以count判断空结果,并为浮点误差定义业务容忍范围。

可以把combine结果赋给total吗?

不可以,返回类型为void。先创建total,再调用其combine方法。

只保存count和average够吗?

不能据此完整恢复最小值、最大值等信息。需要分片统计时应保留所需字段与输入口径,不要把片均值当成一个普通样本accept进总对象。

合并后能撤回某一片吗?

这个接口没有对应的减去分片操作。需要撤回或纠错时,保留有效分片记录并重建总统计,尤其不要简单相减后猜测最小值和最大值。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
PHP SplDoublyLinkedList 的 DELETE 模式怎样影响遍历结果PHP SplDoublyLinkedList 的 DELETE 模式怎样影响遍历结果
上一篇
PHP SplDoublyLinkedList 的 DELETE 模式怎样影响遍历结果
Java DoubleSummaryStatistics 遇到 NaN 后哪些统计值会受影响
下一篇
Java DoubleSummaryStatistics 遇到 NaN 后哪些统计值会受影响
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    777次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    772次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    858次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    823次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    652次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码