Sobes.tech
Junior — Middle

Aký typ dátového toku predstavuje Subject v RxJava a čím sa líši od iných typov?

sobes.tech AI

Odpoveď od AI

Subject v RxJava — je špeciálny typ toku dát, ktorý je súčasne Observable aj Observer. To znamená, že môže emitovať dáta (pre odberateľov) a tiež ich prijímať (od iných Observable).

Rozdiely medzi Subject a bežným Observable:

  • Multicast: Subject umožňuje viacerým odberateľom dostať rovnaké dáta, na rozdiel od bežných Observable, ktoré sú predvolene unicast.
  • Možnosť manuálneho odosielania udalostí: Môžete programovo volať metódy onNext(), onError(), onComplete() na Subject na riadenie toku dát.
  • Rôzne typy Subject: Existujú PublishSubject, BehaviorSubject, ReplaySubject a AsyncSubject, každý s vlastnými vlastnosťami v ukladaní a vysielaní udalostí.

Príklad použitia PublishSubject:

PublishSubject<String> subject = PublishSubject.create();

subject.subscribe(item -> System.out.println("Odběratel 1: " + item));

subject.onNext("Ahoj");
subject.onNext("svet");

subject.subscribe(item -> System.out.println("Odběratel 2: " + item));

subject.onNext("!");

Tu druhý odberateľ dostane iba udalosť "!", pretože PublishSubject neukladá predchádzajúce hodnoty.