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

Kotlin层级分类转Map优化:用associate方法替代嵌套for循环

优化后实现代码

你可以结合groupBy+associateWith两个API完成需求,相比原来的嵌套循环,不仅代码更简洁,还能把时间复杂度从O(n*m)降到O(n+m),数据量大的时候效率提升更明显:

private fun createMapOfLevelCategories(listOfTopsProductFilterItem: List<TopsProductFilterItem>): Map<TopsProductFilterItem, List<TopsProductFilterItem>> {
    // 提前把所有level3条目按parentId分组,只需遍历一次level3列表
    val level3GroupByParent = listOfTopsProductFilterItem
        .filter { it.catalogSearchCustomAttribute.level == 3 }
        .groupBy { it.catalogSearchCustomAttribute.parentId }

    // 筛选level2条目,直接关联对应level3列表生成目标Map
    return listOfTopsProductFilterItem
        .filter { it.catalogSearchCustomAttribute.level == 2 }
        .associateWith { level2Item ->
            // 从预分组的Map中取对应列表,无匹配则返回空列表
            level3GroupByParent[level2Item.value.toInt()].orEmpty()
        }
}

逻辑说明

  • 先用groupBy将三级分类按父ID分组,后续查找对应父分类的三级列表直接从Map中取值,不需要每次都遍历全量三级分类
  • associateWith是专门用于「以集合元素为key,自定义生成对应value」的API,完全替代原来手动创建可变Map、遍历赋值的冗余逻辑
  • 如果你的业务场景中存在value不是合法数字的情况,可以把level2Item.value.toInt()改成level2Item.value.toIntOrNull() ?: -1避免类型转换异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:36:00