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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:40:40