首页 > Java > java教程 > 正文

Java Collectors类如何收集流操作结果

P粉602998670
发布: 2025-10-03 17:44:01
原创
831人浏览过
Collectors类提供丰富静态方法将流元素收集到集合、Map或数值结果中,如toList()、toSet()、toMap()实现集合转换,groupingBy()和partitioningBy()支持分组与分区,counting()、summarizingInt()等用于聚合统计,joining()可拼接字符串,结合lambda提升代码可读性。

java collectors类如何收集流操作结果

Java中的Collectors类是java.util.stream.Collectors工具类,用于将流(Stream)中的元素收集到目标容器中,比如集合、字符串或数值结果。它提供了丰富的静态方法来支持常见的归约操作,是流式编程中不可或缺的一部分。

收集到集合类型

最常见的是把流中的元素收集为List、Set或Map。

例如:
  • toList():将元素收集到一个List中
  • toSet():收集到Set,自动去重
  • toCollection(集合构造器):指定具体集合类型,如TreeSet
示例代码:
List<String> list = Stream.of("a", "b", "c").collect(Collectors.toList());
Set<Integer> set = Stream.of(1, 2, 2, 3).collect(Collectors.toSet());
登录后复制

收集为Map结构

使用toMap可以将流中的对象转换为键值对形式的Map。

常用方法:
  • toMap(键映射函数, 值映射函数)
  • 当存在重复键时,需提供第三个参数(合并函数)避免冲突
示例:
Map<Integer, String> map = list.stream()
    .collect(Collectors.toMap(
        Person::getId, 
        Person::getName,
        (existing, replacement) -> existing  // 冲突时保留旧值
    ));
登录后复制

分组与分区操作

Collectors支持按条件对数据进行分类。

MagicStudio
MagicStudio

图片处理必备效率神器!为你的图片提供神奇魔法

MagicStudio 102
查看详情 MagicStudio

立即学习Java免费学习笔记(深入)”;

  • groupingBy(Function):按某个属性分组,返回Map<K, List>
  • groupingByConcurrent:并发版本,适合并行流
  • partitioningBy(Predicate):按布尔条件分成两组(true/false)
举例:
Map<String, List<Person>> byDept = people.stream()
    .collect(Collectors.groupingBy(Person::getDepartment));

Map<Boolean, List<Integer>> evenOdd = numbers.stream()
    .collect(Collectors.partitioningBy(n -> n % 2 == 0));
登录后复制

聚合与统计数值结果

可用于计算总和、平均值、计数等。

  • counting():计数
  • summingInt/Long/Double:求和
  • averagingInt/Long/Double:求平均
  • summarizingInt/Long/Double:返回统计对象(含count, sum, min, max, average)
示例:
long count = list.stream().collect(Collectors.counting());
double avgAge = users.stream().collect(Collectors.averagingDouble(User::getAge));
IntSummaryStatistics stats = numbers.stream().collect(Collectors.summarizingInt(x -> x));
登录后复制

连接字符串

对于字符串流,可以用joining拼接内容。

  • joining():无分隔符拼接
  • joining(", "):用逗号加空格连接
  • joining(", ", "[", "]"):带前缀和后缀
示例:
String joined = Stream.of("a", "b", "c")
    .collect(Collectors.joining(", ", "[", "]"));
// 输出: [a, b, c]
登录后复制
基本上就这些常见用法。Collectors让流的结果处理变得简洁高效,结合lambda表达式可大幅提升代码可读性。根据实际需求选择合适的收集方式即可。

以上就是Java Collectors类如何收集流操作结果的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号