Tengo problemas para diferenciar la diferencia exacta entre estos tres operadores.
La documentación para:
Estos enlaces de documentación indican que dos flujos están mapeados en un solo objeto de flujo. Estoy bien con eso, pero me cuesta entender cómo cambiarían las emisiones entre estos tres operadores.
Revisé el código fuente y encontré una guía sensata que no encontré en Google. https://kotlinlang.org/docs/reference/coroutines/flow.html#flattening-flows
La guía explica las diferencias, pero todavía no me quedó claro, así que lo reescribí con mis propias palabras aquí.
La diferencia básica entre los tres está determinada por la forma en que el flujo interno y externo reaccionan a las nuevas emisiones de cualquiera de los flujos. Así que para el código dado:
val outerFlow: Flow<> val flatMappedFlow = outerflow .flatMapXXXXX { innerFlow(it) } .collect { processFlatMapResult(it) }PlanoMapaConcat
Este operador es secuencial y apareado. Una vez que el flujo externo emite una vez, el flujo interno debe emitir una vez antes de recopilar el resultado final. Una vez que cualquiera de los flujos emite una enésima vez, el otro flujo debe emitir una enésima vez antes de que se recopile el enésimo resultado de mapa plano.
PlanoMapaFusionar
Este operador tiene las restricciones mínimas sobre las emisiones, pero puede generar demasiadas emisiones. Cada vez que outsideFlow emite un valor, cada una de las emisiones de innerFlow se mapean planas desde ese valor hasta el flatMapResult final que se va a recopilar. El conteo final de emisiones es una multiplicación de las emisiones de flujo interno y flujo externo.
planomapaúltimo
Este operador solo se preocupa por los últimos resultados emitidos y no procesa emisiones antiguas. Cada vez que el flujo externo emite un valor, se mapea con el último valor del flujo interno . Cada vez que el flujo interno emite un valor, se mapea con el valor más reciente del flujo externo . Por lo tanto, el recuento final de emisiones es un valor entre cero y las emisiones de flujo interno multiplicadas por las emisiones de flujo externo.