新闻详情

新闻详情

首页 / 资讯中心 / 详情

如果像 AI 一样写 Lambda(第 4 篇):聚合与收集

发布时间:2026/9/30 11:27:29来源:尧图网络
如果像 AI 一样写 Lambda(第 4 篇):聚合与收集
如果像 AI 一样写 Lambda(第 4 篇):聚合与收集(Stream 应用篇)一句话总结:流处理完总要收摊。Collectors.toList/joining/groupingBy/reduce是把流变回集合、字符串、Map、单值的四大收摊工具,它们本身就是::的重度用户。相关文档:《如果像AI一样写Lambda-第3篇-转换与过滤-通俗版.md》——先加工,再收摊。0. 比喻:收银台汇总写法比喻普通人的写法一个个手记,最后自己算总账函数式写法把汇总规则告诉收银机AI lambda 简写规则直接指到现成方法,比如求和用Integer::sum表达1. 流变 List:collect(toList)场景:加工完的流,装回一个 List。① 普通人的写法:for 循环逐个装ListStringresultnewArrayList();for(Stringname:names){if(name!null){result.add(name.trim());}}② 函数式写法:filter map collectListStringresultnames.stream().filter(name-name!null).map(name-name.trim()).collect(Collectors.toList());③ AI lambda 简写:全链路方法引用ListStringresultnames.stream().filter(Objects::nonNull).map(String::trim).collect(Collectors.toList());Collectors.toList()是固定搭配,AI 几乎不会去 new ArrayList 手抄。filter → map → collect三段式的组合正是第 3 篇两个 API 的串联。2. 流变字符串:joining场景:把列表拼成逗号分隔的字符串。① 普通人的写法:StringBuilder 手拼ListStringitemsArrays.asList(A,B,C);StringBuildersbnewStringBuilder();for(inti0;iitems.size();i){if(i0){sb.append(,);}sb.append(items.get(i));}Stringresultsb.toString();// A,B,C② 函数式写法:collect(joining)Stringresultitems.stream().collect(Collectors.joining(,));③ AI lambda 简写:先流式加工再拼接Stringresultnames.stream().filter(Objects::nonNull).map(String::trim).collect(Collectors.joining(,));补充:如果只是纯列表拼接(不加工),String.join(,, items)比 stream 更短;joining的舞台在先过滤、再转换、最后拼的组合拳里。3. 流变 Map:groupingBy场景:按某个规则把列表分组,变成 Map。① 普通人的写法:for 循环 computeIfAbsentMapString,ListStringgroupMapnewHashMap();for(Stringname:names){Stringkeyname.substring(0,2);// 按前两个字符分组groupMap.computeIfAbsent(key,k-newArrayList()).add(name);}② 函数式写法:groupingBy lambdaMapString,ListStringgroupMapnames.stream().collect(Collectors.groupingBy(name-name.substring(0,2)));③ AI lambda 简写:分组 计数一步到位MapString,Longcountsnames.stream().collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));groupingBy的第二个参数可以继续嵌套收集器,统计、再映射都能一行完成,这是它被 AI 偏爱的原因。4. 流变单值:reduce场景:把一堆数合成一个结果(求和、求最大值)。① 普通人的写法:for 循环累加ListIntegernumsArrays.asList(1,2,3,4,5);intsum0;for(intn:nums){sumn;}② 函数式写法:reduce 完整 lambdaintsumnums.stream().reduce(0,(a,b)-ab);③ AI lambda 简写:多参数方法引用intsumnums.stream().reduce(0,Integer::sum);Integer::sum等价于(a, b) - Integer.sum(a, b)——方法引用同样支持多参数,只要参数个数对得上。求最大值同理:reduce(Integer::max)。5. 四大收摊工具对照表工具目标形态典型用途一句话记忆Collectors.toList()List过滤/转换后落盘流 → 列表Collectors.joining(,)String拼接展示流 → 字符串Collectors.groupingBy(...)Map分组统计流 → 分组reduce(0, Integer::sum)单值求和/求极值流 → 单值6. 陷阱:Collectors.toMap 重复 key 会炸groupingBy自动处理重复 key(合并成 List),但toMap不会:// ❌ 两个元素算出的 key 相同 → 抛 IllegalStateExceptionMapString,Stringmapnames.stream().collect(Collectors.toMap(name-name.substring(0,2),Function.identity()));// ✅ 必须给出冲突策略(k1, k2) - k2 表示后到的覆盖先到的MapString,Stringmapnames.stream().collect(Collectors.toMap(name-name.substring(0,2),Function.identity(),(k1,k2)-k2));不确定 key 是否唯一时,groupingBy永远比toMap安全。一页速记收摊四件套:流变 List 用toList,变字符串用joining,变 Map 用groupingBy,变单值用reducefilter → map → collect是 AI 处理列表的标准三段式纯列表拼接用String.join(,, items),流式加工后才用joiningreduce(0, Integer::sum) 求和,reduce(Integer::max) 求最大值方法引用支持多参数:(a, b) - a bInteger::sumtoMap遇重复 key 会抛异常,必须写第三参(k1, k2) - k2;不确定唯一就用groupingBy
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

MySQL Python官方驱动全指南:连接、事务、连接池与性能调优 2026/9/30 12:03:29

MySQL Python官方驱动全指南:连接、事务、连接池与性能调优

1. 官方驱动与第三方驱动的选型,别只看名声1.1 官方驱动到底比第三方驱动强在哪里先直接说结论:mysql-connector-python是 MySQL 官方维护的 Python 驱动,搞定 Python 连 MySQL 这件事,它是最“正统”的选择。很多人从 PyMySQL 或…

阅读更多 →
Ubuntu下载安装全流程:虚拟机、双系统与首次配置实战 2026/9/30 12:03:28

Ubuntu下载安装全流程:虚拟机、双系统与首次配置实战

1. 想清楚再动手:Ubuntu安装前的三个决策每次有人问我"想学Linux,第一步干什么",我的答案从来都不是"去买本书"或者"先背命令大全",而是直接装一个Ubuntu上手用。原因很朴素:Linux这东西…

阅读更多 →
用Navicat管理MySQL数据库表:从建库到索引避坑指南 2026/9/30 12:03:28

用Navicat管理MySQL数据库表:从建库到索引避坑指南

刚接触MySQL的人,十个里有八个第一次建表是在Navicat里完成的。双击连接名、点开表、填字段、点保存,看起来比命令行友好太多。但你有没有想过,建库窗口里那几个下拉框、建表窗口里的引擎和索引页签,每一个都可能在你上线两个月后…

阅读更多 →
ESP-IDF组件机制深度解析:CMake驱动的嵌入式模块化设计 2026/9/30 12:03:27

ESP-IDF组件机制深度解析:CMake驱动的嵌入式模块化设计

1. 项目概述:为什么在 VS Code 里搞懂 ESP-IDF 组件机制,比“能跑通 demo”重要十倍 你是不是也经历过这样的场景:刚用 ESP-IDF 官方安装脚本配好环境,在 VS Code 里点一下“Build”,LED 灯亮了,串口打印出…

阅读更多 →
Kali Linux安装搜狗输入法:fcitx配置与排障全攻略 2026/9/30 12:03:27

Kali Linux安装搜狗输入法:fcitx配置与排障全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Krypton Toolkit实战:第一个Krypton例子与WinForms换肤 2026/9/30 12:03:19

Krypton Toolkit实战:第一个Krypton例子与WinForms换肤

做了这么多年 WinForms,最常被人吐槽的不是业务逻辑写得不好,而是界面看起来“太老气”。默认控件那个样子,放在 2025 年确实有点拿不出手。我试过自绘、贴图、换肤,折腾一圈下来,最后还是回归到了 Krypton Toolkit。这…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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