Kombiniranje vidljivih u RxJavi

1. Uvod

U ovom brzom vodiču razgovarat ćemo o različitim načinima kombiniranja Vidljive u RxJavi.

Ako ste novi u RxJavi, svakako prvo pogledajte ovaj uvodni vodič.

Sad, krenimo odmah.

2. Vidljive

Uočljiv sekvence, ili jednostavno Vidljive, su prikazi asinkronih tokova podataka.

Oni se temelje na uzorku Promatrača u kojem je objekt nazvan Posmatrač, pretplaćuje se na stavke koje emitira Uočljiv.

Pretplata ne blokira kao Posmatrač stoji da reagira na bilo što Uočljiv emitirat će u budućnosti. To, pak, olakšava istodobnost.

Evo jednostavne demonstracije u RxJavi:

Vidljivo .od (novi String [] {"John", "Doe"}). Pretplata (ime -> System.out.println ("Hello" + ime))

3. Kombiniranje vidljivih

Kada programirate pomoću reaktivnog okvira, uobičajen je slučaj kombiniranja različitih Vidljive.

Na primjer, u web aplikaciji možda ćemo trebati dobiti dva skupa asinkronih tokova podataka koji su međusobno neovisni.

Umjesto da čekamo da prethodni tok završi prije nego što zatražimo sljedeći tok, možemo istovremeno nazvati oba i pretplatiti se na kombinirane tokove.

U ovom ćemo odjeljku razgovarati o različitim načinima na koje možemo kombinirati višestruke Vidljive u RxJavi i različitim slučajevima upotrebe na koje se svaka metoda odnosi.

3.1. Sjediniti

Možemo koristiti sjediniti operator kombinira izlaz višestrukog Vidljive tako da se ponašaju kao jedan:

@Test javna praznina givenTwoObservables_whenMerged_shouldEmitCombinedResults () {TestSubscriber testSubscriber = novi TestSubscriber (); Observable.merge (Observable.from (new String [] {"Hello", "World"}), Observable.from (new String [] {"I love", "RxJava"})). Pretplata (testSubscriber); testSubscriber.assertValues ​​("Zdravo", "Svijet", "Volim", "RxJava"); }

3.2. MergeDelayError

The mergeDelayError metoda je ista kao sjediniti u tome što kombinira višestruke Vidljive u jedno, ali ako se tijekom spajanja pojave pogreške, omogućuje nastavak predmeta bez grešaka prije širenja pogrešaka:

@Test javna praznina givenMutipleObservablesOneThrows_whenMerged_thenCombineBeforePropagatingError () {TestSubscriber testSubscriber = novi TestSubscriber (); Observable.mergeDelayError (Observable.from (new String [] {"hello", "world"}), Observable.error (new RuntimeException ("Neki izuzetak")), Observable.from (new String [] {"rxjava"} )) .subscribe (testSubscriber); testSubscriber.assertValues ​​("zdravo", "svijet", "rxjava"); testSubscriber.assertError (RuntimeException.class); }

Gornji primjer emitira sve vrijednosti bez grešaka:

zdravo svijetu rxjava

Imajte na umu da ako koristimo sjediniti umjesto mergeDelayError, Nizrxjava ” neće se emitirati jer sjediniti odmah zaustavlja protok podataka iz Vidljive kad se dogodi greška.

3.3. Zip

The zip metoda produženja okuplja dva niza vrijednosti kao parove:

@Test javna praznina givenTwoObservables_whenZipped_thenReturnCombinedResults () {Lista zippedStrings = new ArrayList (); Observable.zip (Observable.from (new String [] {"Simple", "Moderate", "Complex"}), Observable.from (new String [] {"Solutions", "Success", "Hierarchy"}), (str1, str2) -> str1 + "" + str2) .subscribe (zippedStrings :: add); assertThat (zippedStrings) .isNotEmpty (); assertThat (zippedStrings.size ()). isEqualTo (3); assertThat (zippedStrings) .contens ("Jednostavna rješenja", "Umjereni uspjeh", "Složena hijerarhija"); }

3.4. Zip s intervalom

U ovom ćemo primjeru arhivirati tok pomoću interval što će zapravo odgoditi emisiju elemenata prve struje:

@Test javna praznina danaAStream_whenZippedWithInterval_shouldDelayStreamEmmission () {TestSubscriber testSubscriber = novi TestSubscriber (); Podaci koji se mogu uočiti = Observable.just ("jedan", "dva", "tri", "četiri", "pet"); Interval uočljiv = Observable.interval (1L, TimeUnit.SECONDS); Uočljivi .zip (podaci, interval, (strData, oznaka) -> String.format ("[% d] =% s", oznaka, strData)) .toBlocking (). Pretplatite se (testSubscriber); testSubscriber.assertCompleted (); testSubscriber.assertValueCount (5); testSubscriber.assertValues ​​("[0] = jedan", "[1] = dva", "[2] = tri", "[3] = četiri", "[4] = pet"); }

4. Sažetak

U ovom smo članku vidjeli nekoliko metoda kombiniranja Vidljive sa RxJavom. Možete naučiti o drugim metodama poput kombiniratiLatest, pridružiti, grupaPridružite se, switchOnNext, u službenoj RxJava dokumentaciji.

Kao i uvijek, izvorni kod za ovaj članak dostupan je u našem GitHub repo-u.


$config[zx-auto] not found$config[zx-overlay] not found