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
相关产品推荐
相关产品推荐

