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

在循环内使用多个并列for循环生成报表是否有更优实现方案?

你当前写的并列循环逻辑存在明显的逻辑问题:townList是全局独立列表,没有按国家过滤的话,会在每个国家的城市行生成完成后,把所有国家的城镇都输出一遍,和你给出的报表格式要求不符。

下面是适配需求的最优实现方案:

方案1:提前按国家对城镇分组(推荐)

只需要对城镇列表做一次预处理,按所属国家分组生成映射表,后续遍历国家时直接取对应城镇列表即可,性能和可读性都最优。

// 预处理:仅执行一次,将城镇按所属国家分组
Map<Country, List<Town>> countryTownMap = townList().stream()
        .collect(Collectors.groupingBy(Town::getCountry));

for (Country country : countryList) {
    // 生成当前国家的所有城市行
    for (City city : country.getCityList()) {
        generateRow(country, city);
    }
    // 生成当前国家的所有城镇行
    List<Town> currentCountryTowns = countryTownMap.getOrDefault(country, Collections.emptyList());
    for (Town town : currentCountryTowns) {
        generateRowForTown(town);
    }
}

方案2:循环时过滤城镇(仅适用极小数据量)

如果城镇数量非常少,不想做预处理,可以在遍历到每个国家时,过滤出属于当前国家的城镇再生成行,缺点是数据量大时性能会明显下降。

for (Country country : countryList) {
    // 生成当前国家的所有城市行
    for (City city : country.getCityList()) {
        generateRow(country, city);
    }
    // 过滤出当前国家的城镇再生成行
    for (Town town : townList()) {
        if (country.equals(town.getCountry())) {
            generateRowForTown(town);
        }
    }
}

方案优势

  1. 完全符合你要求的报表格式:同一国家的所有城市行在前,城镇行在后,不同国家的数据不混杂
  2. 推荐的预处理方案时间复杂度仅为O(M+N)(M为城镇总数,N为城市总数),性能最优
  3. 逻辑拆分清晰,后续维护调整成本低

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:18:03