Programarea reactiva Java. Implementarea si abonarea la un observer

Programarea reactiva Java. Implementarea si abonarea la un observer

Continuam seria noastra de articole despre programarea reactiva in Java. De aceasta data ne uitam la implementarea si abonarea la un observer.
9 Nov 2021 531

Implementarea si abonarea la un observer

In Java 9, nu exista implementarea unor fluxuri reactive ci doar o specificatie. Insa, sunt mai multe librarii — implementari ale abordarii reactive. In acest exemplu, folosim libraria RxJava. Ne abonam la un flux de date si definim mai multi handleri, mai exact, metode care vor rula la inceputul procesarii fluxului (onSubscribe), la primirea fiecarui mesaj ulterior (onNext), atunci cand au loc erori (onError), si la finalizarea unui flux (onComplete):

implementing and subscribing to an observer.png


Hai sa ne uitam la ultimul string.

locations.map(String::length).filter(l -> l >= 5).subscribe(observer);

Folosim operatorii map si filter. Daca ai lucrat cu fluxurile Java 8, stii cu siguranta sa folosesti map si filter. Aici functioneaza la fel. Diferenta este ca, in programarea reactiva, acele valori ar putea sa apara gradual. De fiecare data cand apare o noua valoare, trece prin toate transformarile. Astfel, String::length va inlocui strings to length pe fiecare linie de cod.

In acest caz, avem 5 (Minsk), 6 (Krakow), 6 (Moscow), 4 (Kiev), 5 (Sofia). Punem un filtru pentru a ramane doar cei peste 5. Obtinem astfel o lista de string lengths care au peste 5 (Kiev dispare). Abonare la fluxul final. Apoi Observer este apelat pentru a reactiona la valorile din fluxul final. Cu fiecare noua valoare, va printa lungimea:

public void onNext(Integer value) {
System.out.println("Length: " + value);

Mai intai, apare Length 5, apoi Length 6.Cand fluxul este finalizat, va fi apelat onComplete, si la final, o sa apara "Done.”:

public void onComplete() {
System.out.println("Done.");

Nu toate fluxurile pot sa completeze. Dar unele pot face asta. Spre exemplu, daca am citi ceva dintr-un fisier, fluxul va completa cand se termina fisierul.

Daca are loc o eroare, putem reactiona:

public void onError(Throwable e) {
e.printStackTrace();

Putem astfel sa reactionam in moduri diferite: la valori, inchierea unor fluxuri si erori.


Articolul original poate sa fie citit aici.

Vrei sa inveti sa programezi cu Java sau sa iti imbunatatesti abilitatile de programare in Java? Parcurge cursurile noastre.


Share the knowledge

Mai ai intrebari?
Contacteaza-ne.
Thank you!
The form has been submitted successfully.