RxJava — Излучает при изменении третьего источника

#observable #rx-java #rx-java2

#наблюдаемый #rx-java #rx-java2

Вопрос:

На самом деле у меня есть что-то вроде этого

 Observable.combineLatest(presenter.getSomething1(), fragmentVisibility, Pair::create)
  .compose(bindToLifecycle())
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(this::trackPage, this::error));
 

где getSomething1() дает некоторую информацию, необходимую для отслеживания моего фрагмента, и на самом деле это работает довольно хорошо.

Но мне нужно добавить еще один наблюдаемый источник, потому что мне нужно больше информации от другого наблюдаемого. При использовании combineLatest и 3 источников функция trackPage() вызывается дважды..

Существует ли оператор типа «излучать только при третьем наблюдаемом изменении»?или что-то в этом роде, что позволило бы мне отслеживать из 3 источников и создавать новое отслеживание только при изменении видимости.

Спасибо!

Комментарии:

1. Вы пробовали то, что я предложил в своем ответе :)?

Ответ №1:

Я не совсем уверен, правильно ли я понял ваш сценарий, но, возможно, вы можете связать combineLatest его с новым наблюдаемым использованием zipWith . The zipWith будет выдавать значение (применяя любую комбинацию выданных значений, которые вы хотите) только тогда, когда combineLatest он выдает значение, и третья наблюдаемая тоже выдает значение. (Документация RxJava zip)

 Observable.combineLatest(presenter.getSomething1(), fragmentVisibility, Pair::create)
  .zipWith(thirdObservable(), (pairEmissionFromCombineLatest, emissionFromThirdObservable) {
    // Combine the emissions and emit a new value (Here I am just re-emitting the emitted value of the combineLatest observable
     return pairEmissionFromCombineLatest;
   })
  .compose(bindToLifecycle())
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(this::trackPage, this::error));