Sobes.tech
Junior — Middle

Aké sú hlavné rozdiely medzi operátormi flatMapLatest a flatMapMerge v reaktívnom programovaní?

sobes.tech AI

Odpoveď od AI

V reaktívnom programovaní, napríklad v Kotlin Flow, sa operátory flatMapLatest a flatMapMerge používajú na transformáciu prvkov toku na nové toky, ale líšia sa v správaní pri výskyte nových prvkov:

  • flatMapLatest: pri príchode nového prvku ukončí predchádzajúci vnútorný tok a prepne sa na nový. To je užitočné, keď záleží iba na poslednom výsledku, napríklad pri vyhľadávaní s automatickým dopĺňaním.

  • flatMapMerge: spúšťa všetky vnútorné toky paralelne a ich výsledky spája, bez ukončenia tých predchádzajúcich. Používa sa, keď je potrebné spracovať všetky požiadavky súčasne.

Príklad:

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

// S flatMapLatest bude spracovaný iba posledný prvok (3), predchádzajúce budú zrušené.

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

// S flatMapMerge budú všetky prvky spracované paralelne a zlúčené do jedného toku.