Collectors.summarizingLong用于提取流中元素的long值并生成包含计数、总和、最值和平均值的LongSummaryStatistics对象,适用于需一次性获取多项统计指标的场景。

在Java中,Collectors.summarizingLong 是 java.util.stream.Collectors 类提供的一个归约操作方法,用于对流中的元素提取 long 值并生成一个 LongSummaryStatistics 对象。这个对象包含了统计信息:计数(count)、总和(sum)、最小值(min)、最大值(max)和平均值(average)。
1. 方法基本语法
该方法的定义如下:
public static Collector summarizingLong(ToLongFunction mapper)
Pic Copilot
AI时代的顶级电商设计师,轻松打造爆款产品图片
158 查看详情
参数说明:
mapper:是一个函数式接口 ToLongFunction,用于从流中的每个元素提取一个 long 值。
2. 返回结果:LongSummaryStatistics
调用 summarizingLong 后会返回一个 LongSummaryStatistics 实例,它提供以下方法获取统计值:getCount():元素数量 getSum():所有值的总和 getMin():最小值(若无元素,默认为 Long.MAX_VALUE) getMax():最大值(若无元素,默认为 Long.MIN_VALUE) getAverage():平均值(若无元素,默认为 0.0)
3. 使用示例
假设有一个用户列表,每个用户有年龄字段(用 long 表示),我们想统计这些用户的年龄汇总信息:
import java.util.*;import java.util.stream.Collectors;class User { private String name; private long age; public User(String name, long age) { this.name = name; this.age = age; } public long getAge() { return age; } // getter 和 setter 省略}public class Main { public static void main(String[] args) { List users = Arrays.asList( new User("Alice", 30), new User("Bob", 25), new User("Charlie", 35), new User("Diana", 28) ); LongSummaryStatistics stats = users.stream() .collect(Collectors.summarizingLong(User::getAge)); System.out.println("总人数: " + stats.getCount()); System.out.println("总年龄: " + stats.getSum()); System.out.println("最小年龄: " + stats.getMin()); System.out.println("最大年龄: " + stats.getMax()); System.out.println("平均年龄: " + stats.getAverage()); }}
输出结果:
总人数: 4
总年龄: 118
最小年龄: 25
最大年龄: 35
平均年龄: 29.5
4. 注意事项与适用场景
适用于需要一次性获取多个统计指标的场景,避免多次遍历流。 输入流为空时,count 为 0,sum 为 0,min 为 Long.MAX_VALUE,max 为 Long.MIN_VALUE,average 为 0.0 —— 使用时注意判断是否为空。 性能优于分别使用 sum()、max() 等单独计算多次。基本上就这些。这个方法简洁高效,适合处理需要综合统计 long 类型数据的业务逻辑。
以上就是Java里如何使用Collectors.summarizingLong统计Long数据_Long数据汇总方法说明的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1056536.html
微信扫一扫
支付宝扫一扫