新闻详情

新闻详情

首页 / 资讯中心 / 详情

HoRain云--Java Stream 自定义 Collector:从 collectingAndThen 到并行收集

发布时间:2026/9/25 20:26:39来源:尧图网络
HoRain云--Java Stream 自定义 Collector:从 collectingAndThen 到并行收集
本文讲解 Java Stream Collector 原理包括内置收集器、自定义 Collector、combiner、并行收集和实战案例。正文1. Collector 接口java复制下载public interface CollectorT, A, R { SupplierA supplier(); BiConsumerA, T accumulator(); BinaryOperatorA combiner(); FunctionA, R finisher(); SetCharacteristics characteristics(); }T元素类型A累加器类型R结果类型2. 内置收集器java复制下载list.stream().collect(Collectors.toList()); list.stream().collect(Collectors.toSet()); list.stream().collect(Collectors.toMap(User::getId, User::getName)); list.stream().collect(Collectors.groupingBy(User::getCity)); list.stream().collect(Collectors.joining(, )); list.stream().collect(Collectors.counting());3. 自定义 Collectorjava复制下载public class ImmutableListCollectorT implements CollectorT, ListT, ListT { public SupplierListT supplier() { return ArrayList::new; } public BiConsumerListT, T accumulator() { return List::add; } public BinaryOperatorListT combiner() { return (a, b) - { a.addAll(b); return a; }; } public FunctionListT, ListT finisher() { return Collections::unmodifiableList; } public SetCharacteristics characteristics() { return Collections.emptySet(); } }使用java复制下载ListString result stream.collect(new ImmutableListCollector());4. Collector.of 简化java复制下载CollectorUser, ?, MapString, Integer collector Collector.of( HashMap::new, (map, user) - map.merge(user.getCity(), 1, Integer::sum), (m1, m2) - { m2.forEach((k, v) - m1.merge(k, v, Integer::sum)); return m1; } );5. CharacteristicsCONCURRENT并行时可多线程累加同一容器。UNORDERED不保证顺序。IDENTITY_FINISHfinisher 为恒等函数。6. collectingAndThenjava复制下载ListString unmodifiable list.stream() .collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));7. teeingJava 12同时收集两个结果java复制下载record Stats(long count, double sum) {} Stats stats list.stream().collect(Collectors.teeing( Collectors.counting(), Collectors.summingDouble(Item::getPrice), Stats::new ));8. 实战分组后排序java复制下载MapString, ListUser result users.stream() .collect(Collectors.groupingBy( User::getCity, Collectors.collectingAndThen( Collectors.toList(), list - list.stream() .sorted(Comparator.comparing(User::getAge)) .toList() ) ));9. 并行收集java复制下载MapString, Long counts list.parallelStream() .collect(Collectors.groupingByConcurrent(User::getCity, Collectors.counting()));并行时使用groupingByConcurrent提升性能。10. 常见坑自定义 Collector 未正确实现 combiner并行结果错误。使用有状态 lambda。toMap 键冲突未处理。并行流与线程安全容器混用。11. 总结自定义 Collector 让 Stream 收集更灵活。理解 supplier、accumulator、combiner、finisher 后可以实现复杂聚合逻辑。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

什么时候用 Spring Boot 就够了,什么时候需要 Spring Cloud 2026/9/25 20:59:47

什么时候用 Spring Boot 就够了,什么时候需要 Spring Cloud

先明确一个前提:Spring Cloud 建立在 Spring Boot 之上。选了 Spring Cloud,你依然在用 Spring Boot 写每个服务。所以真正的问题不是“二选一”,而是: 这个项目,需要分布式治理能力吗?要知道推动 Spring B…

阅读更多 →
开源PS5模拟器KytyPS5终极解析:跨Windows、Linux、macOS三平台运行3D大作的完整技术路线图 2026/9/25 20:59:47

开源PS5模拟器KytyPS5终极解析:跨Windows、Linux、macOS三平台运行3D大作的完整技术路线图

开源PS5模拟器KytyPS5终极解析:跨Windows、Linux、macOS三平台运行3D大作的完整技术路线图 【免费下载链接】KytyPS5 PlayStation 5 emulator for Windows, Linux and MacOS 项目地址: https://gitcode.com/gh_mirrors/ky/KytyPS5 KytyPS5 是一款免费、开源的…

阅读更多 →
64G存储卡能录多久?码率换算与录制时长速查指南 2026/9/25 20:59:47

64G存储卡能录多久?码率换算与录制时长速查指南

1. 先搞明白:64G 存储卡到底"能吃"多少数据?很多人买了 64G 存储卡往相机、运动相机、行车记录仪里一插,心里就开始犯嘀咕:这卡到底能录多久?问身边朋友,有人说能录一天,有人说只能录…

阅读更多 →
智能体供应链安全与token成本优化成今日技术主线 | 林伽一 · AI科技日报 | 2026年09月24日 2026/9/25 20:59:46

智能体供应链安全与token成本优化成今日技术主线 | 林伽一 · AI科技日报 | 2026年09月24日

AI编程智能体的软件供应链今天暴露出一个系统性缺口:AIR Security公开的Plugin4Shell零点击远程代码执行漏洞,同时影响Claude Code、Codex、GitHub Copilot与Gemini CLI四款主流工具,根因是插件市场"固定SHA指纹却不校验下载哈希"的…

阅读更多 →
RAG原理-RAG系统构建案例分析 2026/9/25 20:59:34

RAG原理-RAG系统构建案例分析

RAG原理-RAG系统构建案例分析RAG 系统构建案例分析本节通过一个“基于企业文档的 LLM 问答系统”,串联 RAG 从知识入库到生成答案的完整流程。核心不是让大模型记住文档,而是在回答前先找出相关资料,再让模型基于资料作答。一、整体架构 整个…

阅读更多 →
一只鸟笼里的建筑课——「大欧鸟笼的建筑智慧」走进青岛东川路小学 2026/9/25 20:59:27

一只鸟笼里的建筑课——「大欧鸟笼的建筑智慧」走进青岛东川路小学

一只竹编的鸟笼,和应县木塔、赵州桥、罗马万神殿之间,能有什么关系?9月17日,2026年科学家进校园科普讲座走进青岛东川路小学,由青岛恒星科技学院智慧建造学院科普专家邹奇志副教授主讲——他从家乡青岛即墨的省级非遗大…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉