java 统计_Java 汇总统计

Java 汇总统计,用户希望获取数值流中元素的数量、总和、最小值、最大值以及平均值。使用 IntStream、DoubleStream 或 LongStream 接口定义的 summaryStatistics 方法。基本类型流 IntStream、DoubleStream 与 LongStream 为 Stream 接口引入了用于处理基本数据类型的方法,summaryStatistics 就是其中一种方法。

Java 汇总统计 问题描述

用户希望获取数值流中元素的数量、总和、最小值、最大值以及平均值。

Java 汇总统计 解决方案

使用 IntStream、DoubleStream 或 LongStream 接口定义的 summaryStatistics 方法。

Java 汇总统计 具体实例

基本类型流 IntStream、DoubleStream 与 LongStream 为 Stream 接口引入了用于处理基本数据类型的方法,summaryStatistics 就是其中一种方法,如例 3-42 所示。

例 3-42 summaryStatistics 方法

➊ 使用 toString 方法打印

从 Java 7 开始,可以在数字字面量中使用下划线,如 1_000_000。

执行上述程序,输出结果类似于:

DoubleSummaryStatistics 类定义的 toString 方法返回字符串的表达形式,也提供用于统计元素数量、总和、最小值、最大值以及平均值的 getter 方法(getCount、getSum、getMax、getMin 以及 getAverage)。当 double 型元素的数量达到 100 万时,最小值趋近于 0,最大值趋近于 1,总和约为 50 万,平均值约为 0.5。

DoubleSummaryStatistics 类还定义了以下两个有趣的方法:

accept 方法用于在汇总信息中记录另一个值,而 combine 方法将两个 DoubleSummaryStatistics 对象合二为一。两种方法在计算结果之前,向类的实例添加数据时使用。

我们以运动员薪资跟踪网站 Spotrac 为例进行讨论。本书的源代码包括一个文件,它记录了 2017 赛季美国职棒大联盟(MLB)全部 30 支球队的薪资数据,这些数据均来自 Spotrac。

例 3-43 定义了一个名为 Team 的类,包括 id、name(队名)与 salary(薪资)。

例 3-43 Team 类包括 id、name 与 salary

解析球队工资文件,结果如下:

可以通过两种方式计算球队集合的汇总统计信息。第一种方式采用 collect 方法的三参数形式,如例 3-44 所示。

例 3-44 传入 Supplier、累加器与组合器的 collect 方法

有关这种 collect 方法的讨论请参见范例实现Collector接口。在本例中,collect 方法通过构造函数引用来提供 DoubleSummaryStatistics 的实例,通过 accept 方法将另一个值添加到现有的 DoubleSummaryStatistics 对象,以及通过 combine 方法将两个单独的 DoubleSummaryStatistics 对象合二为一。

输出结果如下(为便于阅读,对结果做了处理):

计算汇总信息的另一种方案请参见范例下游收集器。此时,汇总计算如例 3-45 所示。

例 3-45 使用 summarizingDouble 方法进行收集

其中,Collectors.summarizingDouble 方法的参数是各队的薪资。无论采用哪种方案,结果并无区别。

从本质上讲,汇总统计类是一种“糟糕”的统计方法,因为它们仅能统计数量、最大值、最小值、总和、平均值等属性。然而,如果只需要这些属性,那么 Java 标准库应能满足需要。3

3当然,读者从本范例中还应学到一点:如果有机会参加 MLB 比赛,那么不妨一试,哪怕只有很短的上场时间。赛后再继续学习 Java 吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值