You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效为同名与唯一名称的Product对象设置frontName字段?

高效实现方案

核心思路是先统计每个产品名称的出现次数,再根据次数批量设置frontName,整体时间复杂度为O(n),是高效的实现方式:

1. 统计名称出现次数

通过Stream分组收集器快速统计每个产品名称的重复次数:

Map<String, Long> nameCountMap = productList.stream()
    .collect(Collectors.groupingBy(Product::getName, Collectors.counting()));

2. 批量设置frontName

遍历产品列表,根据统计结果判断是否需要拼接分类名称:

productList.forEach(product -> {
    long nameOccurrence = nameCountMap.get(product.getName());
    if (nameOccurrence > 1) {
        product.setFrontName(product.getName() + "," + product.getCategoryName());
    } else {
        product.setFrontName(product.getName());
    }
});

方案优势

  • 仅需两次线性遍历,避免嵌套循环带来的O(n²)复杂度;
  • 统计逻辑和设置逻辑分离,代码简洁易维护;
  • 若数据量极大,可将stream()替换为parallelStream()实现并行处理(需确保Product对象无并发修改风险)。

内容的提问来源于stack exchange,提问作者Alex Grimaldo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:20:56