我正在尝试从RxJava切换到Kotlin Flow。流量确实令人印象深刻。但是,现在在kotlin Flow中是否有类似于RxJava的“ GroupBy”的运算符?
这是groupBy
的简单实现,发出(key, list(t))
对:
fun <T, K> Flow<T>.groupBy(keyFn: (T) -> K): Flow<Pair<K, List<T>>> = flow {
val storage = mutableMapOf<K, MutableList<T>>()
collect { t -> storage.getOrPut(keyFn(t)) { mutableListOf() } += t }
storage.forEach { (k, ts) -> emit(k to ts) }
}
对于此示例:
suspend fun main() {
val input = 1..10
input.asFlow()
.groupBy { it % 2 }
.collect { println(it) }
}
打印
(1, [1, 3, 5, 7, 9])
(0, [2, 4, 6, 8, 10])