发布时间:2026/7/31 14:37:35
stream流浅拷贝 浅拷贝在stream中未使用map等方式此时是浅拷贝ListEmapMachineDTO distinctList machineVOList.stream() .collect(Collectors.toMap( dto - buildDedupKey(dto.getDepartment(), dto.getPhase(), dto.getMachineId(), dto.getModuleSec()), Function.identity(), (existing, replacement) - existing )) .values() .stream() .collect(Collectors.toList());后续对原来的 machineVOList 数据进行操作是会影响到前面的 distinctList 这个数据的for (EmapMachineDTO vo : machineVOList) { if (vo.getMachineId() ! null) { ..... vo.setStatus(statusEnum.getCode()); vo.setColor(statusEnum.getColor()); } }问题分析你观察得很准确。原因在于distinctList中的对象和machineVOList中的对象是同一个引用修改其中一个就会影响到另一个。为什么会这样看这段去重逻辑ListEmapMachineDTO distinctList machineVOList.stream() .collect(Collectors.toMap( dto - buildDedupKey(...), Function.identity(), (existing, replacement) - existing )) .values() .stream() .collect(Collectors.toList());Function.identity()直接使用的就是machineVOList里的对象本身没有做任何拷贝。所以最终distinctList只是原列表中某些元素的引用集合。后续的循环for (EmapMachineDTO vo : machineVOList) { vo.setStatus(code); vo.setColor(color); }遍历的是同一个对象集合当然就会把状态和颜色写到distinctList里包含的那些对象上因为它们是同一个实例。这是问题吗从当前逻辑看很可能正是你想要的效果——你最终输出的是distinctListresp.setEmapMachineList(distinctList)所以让去重后的数据也带上状态是正确的。但如果你的设计期望是两个列表互相独立那就会出现副作用。何避免如果需要独立方案1拷贝后去重在去重前就先做一份浅拷贝例如ListEmapMachineDTO distinctList machineVOList.stream() .map(dto - { EmapMachineDTO copy new EmapMachineDTO(); BeanUtils.copyProperties(dto, copy); // 或者其他拷贝方式 return copy; }) .collect(Collectors.toMap(...)) ...这样修改machineVOList就不会影响distinctList反之亦然。【×会影响】方案2直接在 distinctList 上设置状态如果你只需要distinctList带状态那可以不修改machineVOList而是在得到distinctList后遍历它for (EmapMachineDTO distinct : distinctList) { if (distinct.getMachineId() ! null) { // 从 statusMap 中获取状态并设置到 distinct 上 } }【×会影响到原数据我自己亲测原数据就会带上distinctList遍历时设置的数据】这样既避免了对原列表的副作用逻辑也更清晰。额外提醒当前循环里可能出现一个machineId对应多条不同 key 的记录它们会拿到同一个status这看起来是符合业务假设的。但要注意statusMap如果缺失某个machineId你用了randomWeightedStatus()作为默认值这可能会导致同一个machineId在不同的调用里出现不同的随机状态如果去重后有多条记录它们的状态也可能不一致。如果这是临时测试代码// todo 暂时写死上线前别忘记替换回真实数据。

相关新闻

2026/7/31 14:37:35

游戏角色互动系统设计:从对话树到情感参数的技术实现

在游戏开发与二次创作领域,角色互动和剧情设计是提升玩家沉浸感的关键环节。以热门游戏《赛马娘》为例,其丰富的角色设定和故事背景为同人创作提供了广阔空间。本文将围绕“训练员与路人马娘的互动”这一主题,从技术角度探讨如何构建一个具有…

2026/7/31 14:37:35

Python项目打包实战:从依赖冻结到独立可执行文件

1. 项目缘起:为什么需要将依赖和源码“锁”在一起? 在Python项目开发中,尤其是涉及到部署、分发或者交付给最终用户时,我们常常会遇到一个令人头疼的问题:“环境依赖”。你精心编写的代码,在自己的电脑上运…

2026/7/31 14:37:35

Unity引擎源码调试实战:10个技巧解决开发深层难题

1. 项目概述:为什么Unity源码调试是进阶开发的必修课 在Unity开发中,我们经常会遇到一些“玄学”问题:某个API的行为和官方文档描述不符,一个看似简单的协程(Coroutine)在特定条件下崩溃,或者物…

2026/7/31 16:57:46

ChatGPT突发封杀令!全球AI写手一夜断粮

如今,这场争议已经动摇了用户对AI写作的基本预期。模型未必越写越好,提示词也不再长期有效。AI写作的黄金时代,正在崩塌!进入,模型一代比一代强,文章却一篇比一篇烂。它知道什么时候列出几条建议&#xff0…

2026/7/31 16:57:46

GitHub Desktop终极中文汉化指南:3分钟快速实现界面本地化

GitHub Desktop终极中文汉化指南:3分钟快速实现界面本地化 【免费下载链接】GitHubDesktop2Chinese GithubDesktop语言本地化(汉化)工具 【GitHub桌面客户端中文汉化】 项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese GitHubDesktop2Ch…

2026/7/31 16:57:46

告别键盘连击烦恼:Windows机械键盘修复工具完全指南

告别键盘连击烦恼:Windows机械键盘修复工具完全指南 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 你是否曾在打字时发现按…

2026/7/31 16:57:46

直接优化策略:策略梯度、Actor-Critic、Advantage 与重要性采样

值函数方法的基本套路是:先学 或,再根据它们诱导出策略。而策略梯度方法走的是另一条路:直接把策略写成带参数的可导函数,然后直接优化它。这在连续动作、复杂策略结构以及需要随机策略的场景里尤其重要。适合读者:已经…

2026/7/29 22:32:30

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

2026/7/31 0:01:11

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:01:11

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:01:11

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:38:56

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…