如何在Kotlin中通过指定Key替换List<Map<String,Any>>映射值
在Kotlin中实现指定列表映射替换的方案
原始数据(#1)
val originalList: List<Map<String, Any>> = listOf( mapOf( "item_id" to "1234", "item_name" to "MY ITEM 1", "origin_item_id" to "NULL" ), mapOf( "item_id" to "9999", "item_name" to "MY ITEM 5", "origin_item_id" to "NULL" ) )
替换数据(#2)
val replacementList: List<Map<String, Any>> = listOf( mapOf( "item_id" to "1111", "item_name" to "CHANGE ITEM 1", "origin_item_id" to "1234" ) )
需求
- 从替换数据中提取
origin_item_id的值(此处为"1234") - 在原始数据中找到
item_id等于该值的映射 - 将原始数据中对应的映射替换为替换数据里的对应映射
实现代码
fun main() { // 原始数据 val originalList: List<Map<String, Any>> = listOf( mapOf( "item_id" to "1234", "item_name" to "MY ITEM 1", "origin_item_id" to "NULL" ), mapOf( "item_id" to "9999", "item_name" to "MY ITEM 5", "origin_item_id" to "NULL" ) ) // 替换数据 val replacementList: List<Map<String, Any>> = listOf( mapOf( "item_id" to "1111", "item_name" to "CHANGE ITEM 1", "origin_item_id" to "1234" ) ) // 将替换数据转为origin_item_id到替换项的映射,提升查找效率 val replacementMap = replacementList.associate { (it["origin_item_id"] as String) to it } // 遍历原始列表完成替换 val resultList = originalList.map { originalItem -> val itemId = originalItem["item_id"] as String replacementMap[itemId] ?: originalItem } // 输出结果验证 resultList.forEach { println(it) } }
代码说明
- 构建替换映射表:用
associate将替换列表转换成键为origin_item_id的Map,后续查找替换项时只需O(1)时间,适合大数据量场景。 - 遍历替换逻辑:通过
map遍历原始列表,对每个项的item_id匹配替换映射表,存在对应替换项则替换,否则保留原项。 - 类型安全提示:示例中用
as String是基于已知数据结构的强转,若实际场景存在类型不确定的情况,建议改用it["origin_item_id"] as? String做安全转换,避免抛出类型转换异常。
扩展能力
该实现支持多替换项场景:如果替换数据中有多个不同origin_item_id的项,replacementMap会自动存储所有映射关系,遍历原始列表时会完成所有匹配项的替换。
内容的提问来源于stack exchange,提问作者rime
相关产品推荐
相关产品推荐

