Sobes.tech
Back to questions
Junior — Middle
65

Можешь перечислить и описать виды Subject в RxJava?

Companies where asked
RedLab
ЯндексЯндекс

Answer from AI

sobes.tech AI

В RxJava Subject — это одновременно Observable и Observer, то есть он может подписываться на другие Observable и сам выступать как источник данных для подписчиков.

Основные виды Subject:

  1. PublishSubjectпубликует только те элементы, которые были эмитированы после подписки. Подписчики не получают прошлые значения.

  2. BehaviorSubject — при подписке сразу отправляет последнее эмитированное значение (или начальное, если новых ещё не было), а затем все последующие.

  3. ReplaySubject — сохраняет все эмитированные значения и при подписке отправляет их все подписчику, а потом продолжает отправлять новые.

  4. AsyncSubject — отправляет подписчикам только последнее значение из последовательности, но только после того, как Observable завершится.

Пример использования BehaviorSubject:

BehaviorSubject<String> subject = BehaviorSubject.createDefault("Начальное");

subject.subscribe(item -> System.out.println("Подписчик 1: " + item));

subject.onNext("Первое");

subject.subscribe(item -> System.out.println("Подписчик 2: " + item));

subject.onNext("Второе");

Здесь второй подписчик сразу получит "Первое" — последнее значение на момент подписки.