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

如何在Kotlin中将篮子-水果列表映射转换为水果-篮子列表映射

Kotlin实现篮子与水果映射的反转转换

给定以篮子为键、对应水果列表为值的映射,要转换成以水果为键、对应篮子列表为值的映射,有几种简洁的实现方式:

方法一:使用flatMap + groupBy(推荐)

这是Kotlin标准库最常用的组合方式,代码简洁且可读性高:

val basketMap = mapOf(
    "basket1" to listOf("apples", "oranges", "grapes"),
    "basket2" to listOf("oranges", "kiwi", "pineapple"),
    "basket3" to listOf("grapes", "apples", "strawberry")
)

// 转换逻辑
val fruitToBaskets = basketMap.flatMap { (basket, fruits) ->
    // 将每个水果与所属篮子配对,展开成Pair列表
    fruits.map { fruit -> fruit to basket }
}.groupBy(
    // 按水果作为分组键
    keySelector = { it.first },
    // 将每个分组中的篮子提取出来组成列表
    valueTransform = { it.second }
)

执行后fruitToBaskets的结构就和预期结果完全一致,默认返回的是Map<String, List<String>>类型,属于不可变映射。

方法二:使用fold手动构建映射

如果想更直观地控制每一步的构建过程,可以用fold遍历并组装结果:

val fruitToBaskets = basketMap.fold(mutableMapOf<String, MutableList<String>>()) { acc, (basket, fruits) ->
    fruits.forEach { fruit ->
        // 若水果不存在则创建新列表,否则获取已有列表,添加当前篮子
        acc.getOrPut(fruit) { mutableListOf() }.add(basket)
    }
    acc
}.mapValues { it.value.toList() } // 将可变列表转为不可变列表

这种方式适合理解底层的聚合逻辑,最终通过mapValues把值转成不可变列表,保证结果的不可变性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:10:15