Kotlin中如何实现多键关联同一对象的映射转换?
Kotlin实现多键映射到同一对象的方案
针对你需要把列表中每个Data对象的多个keys都映射到自身的需求,这里有几种实用的实现方式:
1. 简洁版:flatMap + toMap
利用flatMap将每个Data拆分为多个(key, Data)键值对,再通过toMap构建最终映射:
val map = list.flatMap { data -> data.keys.map { key -> key to data } }.toMap()
2. 自定义扩展函数:实现类似associateByAll的功能
如果需要复用这个逻辑,可以给Iterable写一个扩展函数,完全贴合你想要的associateByAll用法:
fun <T, K> Iterable<T>.associateByAll(keySelector: (T) -> Iterable<K>): Map<K, T> { return flatMap { item -> keySelector(item).map { key -> key to item } }.toMap() } // 调用方式和你预想的一样 val map = list.associateByAll { it.keys }
3. 可读性优先:buildMap构建
用buildMap手动遍历添加键值对,逻辑更直观,适合需要额外处理的场景(虽然你这里key唯一不需要,但可读性拉满):
val map = buildMap { list.forEach { data -> data.keys.forEach { key -> put(key, data) } } }
因为你明确所有key都是唯一的,以上三种方法都能完美实现需求,根据你的场景选择即可。
内容的提问来源于stack exchange,提问作者metrik
相关产品推荐
相关产品推荐

