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

Kotlin中如何将点分隔字符串列表转换为Map<String, List<String>>?

解决方案

Kotlin 标准库提供了专属的分组API groupBy,可以直接实现你要的一对多分组合并效果,代码如下:

val field = listOf("key1.value1", "key1.value2", "key2.value3")
val attributes = field.groupBy(
    keySelector = { it.substringBefore('.') },
    valueTransform = { it.substringAfter('.') }
)

注:如果你需要和原代码逻辑完全对齐(支持元素包含多个.的场景,取第一个.前的内容为key,最后一个.后的内容为value),可以将keySelector和valueTransform替换为{ it.split(".").first() }和{ it.split(".").last() }。如果你的业务场景下每个元素仅包含一个.,使用substringBefore/substringAfter性能更高,不需要生成额外的列表对象。

原associateByTo不生效的原因

associateBy/associateByTo的设计定位就是一对一映射,同一个key出现多次时,后面的会直接覆盖前面的,所以天然不适合这种一对多的分组场景。

如果需要可变的Map/List

如果后续需要修改生成的attributes集合,可以使用groupByTo指定可变集合:

val attributes = field.groupByTo(
    destination = mutableMapOf(),
    keySelector = { it.substringBefore('.') },
    valueTransform = { it.substringAfter('.') }
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:45:02