如何高效地为重复与唯一名称的产品设置不同的 frontName
发布时间 - 2025-12-27 00:00:00 点击率:次本文介绍一种高效、简洁的 java stream 方案,用于批量处理产品列表:对名称重复的产品拼接 category 名称生成 frontname,对唯一名称产品则直接赋值 name。
在实际业务中,我们常需根据字段的重复性对对象进行差异化处理。以 Product 类为例,当多个产品具有相同 name(但属于不同 categoryName)时,需将 frontName 设为 "name,categoryName";而名称唯一的商品,则仅设为 name。核心挑战在于:一次遍历识别重复项,再二次遍历完成赋值,避免嵌套循环导致 O(n²) 时间复杂度。
以下是一个兼顾可读性与性能的解决方案:
// 第一步:识别所有重复的 product name Setseen = new HashSet<>(); Set duplicateNames = productList.stream() .map(Product::getName) .filter(name -> !seen.add(name)) // add() 返回 false 表示已存在 → 即为重复项 .collect(Collectors.toSet()); // 第二步:遍历并按规则设置 frontName productList.forEach(product -> { String name = product.getName(); if (duplicateNames.contains(name)) { product.setFrontName(name + "," + product.getCategoryName()); } else { product.setFrontName(name); } });
✅ 关键点说明:
- seen.add(name) 利用 HashSet.add() 的返回值(true 表示新增成功,false 表示已存在),精准捕获首次出现后的所有重复 name;
- 使用 Set
存储重复名,保证后续 contains() 查询为 O(1); - 整体时间复杂度为 O(n),空间复杂度为 O(n)(最坏情况所有 name 均不同);
- 无需修改原始类或引入第三方库,纯 JDK 8+ Stream 实现。
⚠️ 注意事项:
- 此方案会原地修改 productList 中的对象,若需不可变处理,请先 stream().map(...).collect(...) 构建新列表;
- 若 name 可能为 null,建议提前过滤或使用 Objects.toString(p.g
etName(), "") 避免 NPE; - 如需区分“严格重复”(至少出现两次)而非“第二次及以后”,当前逻辑已满足——duplicateNames 中只含真正重复的 name。
该方法简洁、高效、易于维护,是处理此类“分组差异化赋值”场景的推荐实践。
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
如何快速配置高效服务器建站软件?
微信小程序 闭包写法详细介绍
利用vue写todolist单页应用
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
在线制作视频的网站有哪些,电脑如何制作视频短片?
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
教你用AI润色文章,让你的文字表达更专业
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
C#如何调用原生C++ COM对象详解
如何用免费手机建站系统零基础打造专业网站?
MySQL查询结果复制到新表的方法(更新、插入)
Laravel怎么使用artisan命令缓存配置和视图
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
如何批量查询域名的建站时间记录?
如何选择可靠的免备案建站服务器?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
如何在IIS管理器中快速创建并配置网站?
如何确保西部建站助手FTP传输的安全性?
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
Android GridView 滑动条设置一直显示状态(推荐)
如何在建站主机中优化服务器配置?
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
如何用PHP工具快速搭建高效网站?
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
iOS UIView常见属性方法小结
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
如何在云主机快速搭建网站站点?
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
如何在阿里云域名上完成建站全流程?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
如何在Tomcat中配置并部署网站项目?
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
网站制作免费,什么网站能看正片电影?
微信小程序 配置文件详细介绍
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Laravel如何与Inertia.js和Vue/React构建现代单页应用
如何在云服务器上快速搭建个人网站?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
如何在阿里云部署织梦网站?
怎么用AI帮你为初创公司进行市场定位分析?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
如何在IIS7上新建站点并设置安全权限?
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解


etName(), "") 避免 NPE;