news 2026/4/17 13:20:26

理解Stream collect toMap的三个参数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
理解Stream collect toMap的三个参数

结论:toMap的方法更易读

// 写法1Collectors.toMap(DetailSkuDTO::getSkuId,// 1. 用 skuId 当柜子标签Function.identity(),// 2. 把整个 DetailSkuDTO 对象放进柜子(existing,replacement)->existing// 3. 如果标签撞了,我只要先来的那个(去重))//写法2// 这种方法固定了在key相同的时候放最后一个元素进去,而toMap可以在key相同时做其他操作Map<Long,DetailSkuDTO>skuIdSkuDTOMap=skuDTOList.stream().collect(HashMap::new,(map,item)->map.put(item.getSkuId(),item),HashMap::putAll);

toMap的第三个参数的写法:

  1. 保留新值,覆盖旧值(后来的居上)
(existing,replacement)->replacement

业务场景:流里的数据按时间排过序了,后面的数据是最新的,我想用最新的覆盖老数据。

  1. 保留旧值(先到先得,常用于去重)
(existing,replacement)->existing

业务场景:就像你代码里写的,我只想知道这个 skuId 第一次出现时对应的信息,后面再出现相同 skuId 的我统统不要。这就是去重的标准写法。

  1. 合并两者(新旧我都要)
// 假设 value 是个数字,我想把相同 key 的数字加起来(existing,replacement)->existing+replacement

业务场景:统计词频,或者合并相同 Key 的金额。

  1. 抛出异常(绝不允重复!)
(existing,replacement)->{thrownewIllegalStateException("发现了重复的Key!");}

业务场景:理论上数据不应该有重复,一旦重复说明数据源脏了,必须让程序立刻报错停机,而不是悄悄忽略。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 13:20:12

迭代路由与等价路由

一、简介 迭代路由 递归查找下一跳&#xff08;不是手工单独配&#xff0c;是自动算出来的&#xff09; 等价路由 同一个目的地&#xff0c;有多条 equally good 路由&#xff08;可以手工配&#xff0c;也可以动态学OSPF&#xff09; 二、迭代路由&#xff08;Recursive/Rel…

作者头像 李华
网站建设 2026/4/17 13:19:45

Codex高效编程:告别重复造轮子

技术文章大纲&#xff1a;告别重复造轮子——Codex写脚本的高效实践理解Codex的核心能力Codex作为基于GPT-3的AI编程工具&#xff0c;能够将自然语言描述转化为可执行代码。其优势在于快速生成常见脚本逻辑&#xff0c;例如文件操作、数据清洗或API调用&#xff0c;减少基础代码…

作者头像 李华
网站建设 2026/4/17 13:19:14

Matlab图例(legend)进阶:从基础标注到专业图表定制

1. Matlab图例基础&#xff1a;从零开始掌握标注技巧 第一次用Matlab画图时&#xff0c;我最头疼的就是怎么让图例清晰易懂。记得有次组会汇报&#xff0c;老板盯着我那个重叠在一起的图例直皱眉&#xff0c;当时真想找个地缝钻进去。其实Matlab的legend函数就像给图表配的说明…

作者头像 李华
网站建设 2026/4/17 13:17:11

电路小白也能懂:二端口网络的R参数与G参数实战解析

电路小白也能懂&#xff1a;二端口网络的R参数与G参数实战解析 想象一下你家的水管系统——水从进水口流入&#xff0c;经过各种弯头和阀门&#xff0c;最终从出水口流出。二端口网络就像这样一个系统&#xff0c;只不过流动的不是水&#xff0c;而是电流和电压。本文将用最生活…

作者头像 李华