В чем разница между FlatMapMerge, FlatMapConcat и FlatMapLatest? - PullRequest
0 голосов
/ 09 июля 2020

Мне сложно различить точную разницу между этими тремя операторами.

Документация для:

Эти ссылки документации указывают на то, что два потока имеют плоское отображение в один объект потока. Меня это устраивает, но мне сложно понять, как изменятся выбросы между этими тремя операторами.

1 Ответ

1 голос
/ 09 июля 2020

Я просмотрел исходный код и нашел разумное руководство, которое не нашел через Google. https://kotlinlang.org/docs/reference/coroutines/flow.html#flattening -flows

В руководстве объясняются различия, но мне все еще было немного непонятно, поэтому я переписал его своими словами здесь.

Основы c разница между этими тремя определяется тем, как внутренний и внешний поток реагируют на новые выбросы из любого потока. Итак, для данного кода:

val outerFlow: Flow<>
val flatMappedFlow = outerflow
        .flatMapXXXXX { innerFlow(it) }
        .collect { processFlatMapResult(it) }

FlatMapConcat

Этот оператор является последовательным и парным. Как только outerFlow испускается один раз, innerFlow должен испустить один раз, прежде чем будет собран окончательный результат. Когда один из потоков генерирует N-й раз, другой поток должен сгенерировать N-й раз, прежде чем будет собран N-й flatMapResult .

FlatMapMerge

Этот оператор имеет наименьшие ограничения на выбросы, но может привести к слишком большому количеству выбросов. Каждый раз, когда outerFlow испускает значение, каждое из выбросов innerFlow преобразуется из этого значения в окончательный flatMapResult для сбора. Окончательный счет выбросов - это умножение выбросов innerFlow и outerFlow.

FlatMapLatest

Этот оператор заботится только о последних полученных результатах и ​​не обрабатывает старые выбросы. Каждый раз, когда outerFlow испускает значение, он получает flatMapped с последним значением innerFlow . Каждый раз, когда innerFlow испускает значение, оно получает flatMapped с последним значением outerFlow . Таким образом, окончательное количество выбросов представляет собой значение между нулевым и внутренним потоком, умноженным на выбросы внешнего потока.

...