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

Kotlin Flow分组扩展函数groupBy的实现优化咨询

Flow 集合分组扩展函数优化方案

Kotlin 标准库已经内置了 Iterable 的分组能力,你完全不需要手动实现遍历、存哈希表的逻辑,直接调用内置方法就可以把代码简化到1行,同时语义更清晰规范。

最简优化版本(返回不可变集合,推荐)

绝大多数场景下下游不需要修改分组后的列表,直接用标准库 groupBy 即可:

inline fun <T, K> Flow<Iterable<T>>.groupIterableBy(crossinline keySelector: (T) -> K): Flow<Map<K, List<T>>> = 
    map { it.groupBy(keySelector) }

适配可变集合返回值的版本

如果你确实需要和原有实现保持一致的返回类型 Map<K, MutableList<T>>,可以用以下写法:

inline fun <T, K> Flow<Iterable<T>>.groupIterableBy(crossinline keySelector: (T) -> K): Flow<Map<K, MutableList<T>>> = 
    map { iterable ->
        iterable.groupByTo(mutableMapOf(), keySelector) { it }
            .mapValues { entry -> entry.value.toMutableList() }
    }

原有实现的可优化点

  • 用 map 做单纯的遍历操作不符合语义,map 是用来做集合转换的,无返回值的遍历应该用 forEach
  • 手动实现哈希表存值的逻辑冗余,还引入了非空断言 !!,有潜在空指针风险
  • 标准库内置方法经过了性能优化,比手动实现的稳定性和效率都更高

使用示例

你需要按 Transaction 的 Category 分组时直接调用即可:

val groupedFlow: Flow<Map<Category, List<Transaction>>> = transactionFlow.groupIterableBy { it.category }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:30:02