Kotlin中Map列表按id分组转为id为键name为值的Map的惯用写法
Kotlin 惯用实现方案
前置准备
如果使用数据类承载列表元素,先定义对应结构:
data class Item(val id: Int, val name: String)
如果输入是List<Map<String, Any>>类型可以跳过这一步,直接用下方对应写法。
核心实现
Kotlin 标准库提供的associate系列扩展函数是集合转Map的最符合语言习惯的方案,无需手动循环写put逻辑:
- 元素为数据类的场景
val itemList = listOf( Item(1, "a"), Item(2, "b"), Item(3, "c") ) // id转字符串作为key,name作为value val result = itemList.associate { it.id.toString() to it.name }
- 元素为Map的场景
val mapList = listOf( mapOf("id" to 1, "name" to "a"), mapOf("id" to 2, "name" to "b"), mapOf("id" to 3, "name" to "c") ) val result = mapList.associate { (it["id"] as Int).toString() to (it["name"] as String) }
补充说明
如果业务场景存在重复id的情况,可以使用重载方法指定冲突策略,避免默认的重复key异常:
// 重复id时保留先出现的name val result = itemList.associateBy( keySelector = { it.id.toString() }, valueTransform = { it.name } )
内容的提问来源于stack exchange,提问作者nkhcode
相关产品推荐
相关产品推荐

