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

Kotlin中groupingBy+aggregate生成的Map是否保证顺序?

Kotlin中groupingBy+aggregate的分组顺序是否有保证?

你的核心疑问是对的:aggregate返回的是Map类型,但Kotlin标准库中groupingBy配合aggregate得到的Map,其键的顺序是严格与输入列表中分组键首次出现的顺序一致的,所以你当前示例的结果顺序是完全有保障的,不需要依赖排序。

原因说明

Kotlin的groupingBy函数默认使用LinkedHashMap来存储分组结果(从Kotlin 1.1版本开始就是这个实现),而LinkedHashMap会维护键的插入顺序——也就是输入列表中每个分组键第一次出现的先后顺序。后续相同键的元素只会追加到对应分组的值中,不会改变键的顺序。

所以你调用.values.toList()时,得到的列表顺序就是输入列表中各个分组首次出现的顺序,完全符合你需要保留输入顺序的要求。

针对你的代码验证

你的示例输入列表中,分组键1先出现,之后才是2,因此分组结果的顺序必然是(1, [a, b])在前,(2, [c, d, e])在后,这个结果是稳定且有标准库实现保证的,和输入列表的顺序完全对应,不需要额外排序操作。

如果想要更明确地控制(比如避免未来版本的潜在变化,虽然可能性极低),也可以显式指定使用LinkedHashMap来收集结果:

val result = records.groupingBy { it.a }
    .aggregateTo(LinkedHashMap()) { _, acc: Pair<Int, List<String>>?, element, _ ->
        if (acc == null) {
            element.a to listOf(element.b)
        } else {
            acc.first to acc.second + element.b
        }
    }.values.toList()

不过这属于冗余操作,因为groupingBy的默认实现已经用了LinkedHashMap。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:35:17