Sobes.tech
Junior — Middle

Aký je rozdiel medzi operátormi zip a combineLatest v knižnici RxJava a v ktorých scenároch je ich použitie vhodné?

sobes.tech AI

Odpoveď od AI

V RxJava sa operátormi zip a combineLatest sa používajú na spojenie viacerých Observable, ale fungujú odlišne:

  • zip: spája prvky z viacerých Observable podľa indexov. Čaká, kým každé zdrojové Observable nevydá nasledujúci prvok, a potom ich spojí do jedného. Ak jedno z Observable vydá menej prvkov, výsledok je obmedzený na najkratšie.

  • combineLatest: pri každom novom prvku z ktoréhokoľvek Observable, kombinuje posledný prvok každého zdroja. Inými slovami, hneď ako akékoľvek Observable vydá novú hodnotu, combineLatest vytvorí kombináciu posledných hodnôt všetkých Observable.

Kedy použiť:

  • zip je vhodný, keď je potrebné synchronizovať prvky v poradí, napríklad spojiť dáta z viacerých zdrojov, ktoré sú logicky prepojené podľa indexov.

  • combineLatest je užitočný, keď je potrebné reagovať na akúkoľvek zmenu v zdrojoch a vždy mať aktuálnu kombináciu posledných hodnôt.

Príklad:

Observable<Long> obs1 = Observable.interval(1, TimeUnit.SECONDS).take(3); // 0,1,2
Observable<Long> obs2 = Observable.interval(500, TimeUnit.MILLISECONDS).take(5); // 0,1,2,3,4

// zip bude emitovať páry (0,0), (1,1), (2,2)
Observable.zip(obs1, obs2, (a, b) -> a + ":" + b)
    .subscribe(System.out::println);

// combineLatest bude emitovať kombinácie pri každom novom prvku
Observable.combineLatest(obs1, obs2, (a, b) -> a + ":" + b)
    .subscribe(System.out::println);

Výber závisí od logiky synchronizácie dát.