Java中的Collectors类有哪些常用功能_Collectors聚合操作解析

发布时间 - 2025-12-31 00:00:00    点击率:
Collectors类是Java Stream API中实现归约与聚合的核心工具,提供toList()、toSet()等集合收集方法,summarizingInt等数值统计方法,groupingBy()、partitioningBy()等分组分区方法,以及支持下游收集器的高级映射组合功能。

Java中的Collectors类是Stream API中实现归约(reduction)与聚合(aggregation)的核心工具,它提供大量静态工厂方法,用于将流中元素收集为各种目标结构,如List、Set、Map,或执行求和、平均、分组、分区等操作。

基础集合收集:toList()、toSet()、toCollection()

最常用的是把流转换为标准集合容器:

  • Collectors.toList():返回新创建的ArrayList,顺序与流一致;
  • Collectors.toSet():返回无序、去重的HashSet(不保证插入顺序);
  • Collectors.toCollection(Supplier):可指定具体集合类型,例如toCollection(LinkedList::new)toCollection(TreeSet::new)

数值统计与汇总:summarizingInt/Long/Double、averagingXXX

适用于数字流,避免手动遍历计算:

  • Collectors.summarizingInt(Person::getAge) 返回IntSummaryStatistics对象,含count、sum、min、max、average;
  • Collectors.averagingDouble(Person::getSalary) 直接返回double型平均值;
  • Collectors.summingLong(Product::getStock) 返回long总和,比先mapToInt再sum更简洁(尤其对包装类型安全)。

分组与分区:groupingBy()、partitioningBy()

按条件对元素分类,是业务逻辑中高频场景:

  • groupingBy(Function) 按键分组,返回Map>,例如groupingBy(Person::getGender)
  • 支持二级聚合:groupingBy(Person::getCity, counting()) 统计各城市人数;
  • partitioningBy(Predicate) 是特殊的二分组(true/false),返回Map>,例如partitioningBy(p -> p.getAge() >= 18)

高级映射与下游收集器组合

几乎所有groupingBypartitioningBy都支持“下游收集器”参数,实现嵌套聚合:

  • groupingBy(Person::getDepartment, mapping(Person::getName, joining(", "))) → 每个部门对应一个姓名拼接字符串;
  • groupingBy(Person::getYear, reducing(0, Person::getSalary, Integer::sum)) → 按年份累加薪资;
  • toMap(keyMapper, valueMapper, mergeFunction) 构建自定义Map,需注意key重复时的合并策略(如(v1,v2) -> v1保留首个)。


# java  # app  # 工具  # stream  # red 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何挑选优质建站一级代理提升网站排名?  如何在万网主机上快速搭建网站?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  如何用PHP快速搭建CMS系统?  如何用好域名打造高点击率的自主建站?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  米侠浏览器网页背景异常怎么办 米侠显示修复  Laravel如何处理和验证JSON类型的数据库字段  如何解决hover在ie6中的兼容性问题  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  文字头像制作网站推荐软件,醒图能自动配文字吗?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  python中快速进行多个字符替换的方法小结  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  Android滚轮选择时间控件使用详解  如何基于云服务器快速搭建网站及云盘系统?  昵图网官方站入口 昵图网素材图库官网入口  如何用低价快速搭建高质量网站?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Laravel怎么在Blade中安全地输出原始HTML内容  魔方云NAT建站如何实现端口转发?  韩国服务器如何优化跨境访问实现高效连接?  Laravel如何使用Eloquent进行子查询  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  php结合redis实现高并发下的抢购、秒杀功能的实例  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Windows Hello人脸识别突然无法使用  怎么用AI帮你为初创公司进行市场定位分析?  如何在建站之星网店版论坛获取技术支持?  如何快速生成凡客建站的专业级图册?  Laravel怎么连接多个数据库_Laravel多数据库连接配置  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  微信小程序 五星评分(包括半颗星评分)实例代码  如何登录建站主机?访问步骤全解析  非常酷的网站设计制作软件,酷培ai教育官方网站?  Laravel用户密码怎么加密_Laravel Hash门面使用教程  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  如何在 React 中条件性地遍历数组并渲染元素  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  Firefox Developer Edition开发者版本入口  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  如何快速搭建FTP站点实现文件共享?  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南