Sobes.tech
Junior — Middle

Jaké jsou hlavní rozdíly mezi operátory flatMapLatest a flatMapMerge v reaktivním programování?

sobes.tech AI

Odpověď od AI

V reaktivním programování, například v Kotlin Flow, se operátory flatMapLatest a flatMapMerge používají k přeměně prvků toku na nové toky, ale liší se v chování při výskytu nových prvků:

  • flatMapLatest: při příchodu nového prvku ukončí předchozí vnitřní tok a přepne se na nový. To je užitečné, když je důležitý pouze poslední výsledek, například při vyhledávání s automatickým doplňováním.

  • flatMapMerge: spouští všechny vnitřní toky paralelně a jejich výsledky slučuje, aniž by ukončil předchozí. Používá se, když je třeba zpracovat všechny požadavky současně.

Příklad:

flowOf(1, 2, 3)
    .flatMapLatest { value -> flow {
        emit(value)
        delay(100)
        emit(value * 10)
    } }

// S flatMapLatest bude zpracován pouze poslední prvek (3), předchozí budou zrušeny.

flowOf(1, 2, 3)
    .flatMapMerge { value -> flow {
        emit(value)
        delay(100)
        emit(value * 10)
    } }

// S flatMapMerge budou všechny prvky zpracovány paralelně a sloučeny do jednoho toku.