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

Java中如何高效将子列表元素匹配添加至父列表?

问题分析与优化方案

当前实现的性能问题

你当前的实现方式不是最优的,核心问题在于时间复杂度:

  • 遍历每个Product(假设数量为M),每次都要对整个ProductSub列表(假设数量为N)做流式过滤
  • 总时间复杂度为O(M*N),当数据量较大时(比如M、N都达到万级),性能会急剧下降

更高效的实现方案

可以通过预分组+哈希查找的方式将时间复杂度降低到O(M+N),具体步骤如下:

  1. 先将ProductSub列表按productId分组,存入一个Map<Long, List<ProductSub>>
  2. 遍历Product列表时,直接从Map中取出对应productId的子列表,无需再遍历整个ProductSub集合

优化后的代码示例

List<Product> productList = ..(从服务获取)
List<ProductSub> productSubList = ..(从服务获取)

// 第一步:预分组ProductSub
Map<Long, List<ProductSub>> productSubMap = productSubList.stream()
    .collect(Collectors.groupingBy(ProductSub::getProductId));

// 第二步:匹配到对应的Product
for (Product productItem : productList) {
    // 从Map中直接获取,不存在则返回空列表(避免null)
    List<ProductSub> subList = productSubMap.getOrDefault(productItem.getProductId(), Collections.emptyList());
    productItem.setProductSublist(subList);
}

额外优化建议

  • 如果ProductSub列表中存在重复的productId+productSubId组合,可以先去重再分组,减少内存占用
  • 如果是在数据库层面能关联查询,优先考虑通过SQL的JOIN语句直接查询出关联好的数据,避免在内存中做匹配,性能会更优

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:55:18