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
相关产品推荐
相关产品推荐

