Compte tenu de 2 flux ou plus avec le même type, existe-t-il une fonction de kotlin coroutine existante pour les fusionner, comme l'opérateur de fusion RX?
Actuellement je considérais cela:
fun <T> merge(vararg flows: Flow<T>): Flow<T> = channelFlow {
val flowJobs = flows.map { flow ->
GlobalScope.launch { flow.collect { send(it) } }
}
flowJobs.joinAll()
}
mais cela semble quelque peu maladroite.
Je ne suis pas encore trop familier avec les flux, alors cela pourrait être sous-optimal. Quoi qu'il en soit, je pense que vous pouvez créer un flux de toutes vos flux d'entrée, puis utilisez flattenMerge
pour les aplatir dans un seul flux. Quelque chose comme ça:
fun <T> merge(vararg flows: Flow<T>): Flow<T> = flowOf(*flows).flattenMerge()