You need to enable JavaScript to run this app. Kotlin中如何反转Map并将原键分组为值列表
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何反转Map并将原键分组为值列表

Kotlin Map分组转换实现修正

之前代码的问题根因

你当前写法得到的结果不符合预期,本质是漏写了groupBy方法的值转换参数:

  • 第一次map操作将原Map的键值对反转后,每个元素都是(原Map值 to 原Map键)形式的Pair对象
  • 直接调用groupBy { it.first }时,方法默认会把完整的待分组元素存入对应分组的列表,而不是提取我们需要的原键值,最终才会出现组内元素都是(4, 1)这类Pair结构的结果。

正确的调整方式

有两种可实现目标效果的写法:

  • 顺着现有代码逻辑,补充groupBy的值转换参数
    给groupBy传入第二个lambda参数,指定分组后存储的具体值:
    val transformedMap = mapToTransform
        .map { it.value to it.key }
        .groupBy(
            keySelector = { it.first }, // 按原Map的值作为分组键
            valueTransform = { it.second } // 分组列表里只存原Map的键
        )
    
  • 更高效的简化写法(无需提前做一次全量map反转)
    直接基于原Map的Entry结构分组,省去中间生成Pair列表的开销:
    val transformedMap = mapToTransform.groupBy(
        keySelector = { it.value },
        valueTransform = { it.key }
    )
    

两种写法最终运行结果完全一致:

{3=[6, 9], 4=[1, 4], 5=[2]}

完全匹配需要的目标Map结构。

内容的提问来源于stack exchange,提问作者Approximations

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 16:15:09