web-dev-qa-db-fra.com

Fusion de flux de kotlin

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.

6
Andy

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()
5
marstran