RxJava перерыв наСледующий - PullRequest
0 голосов
/ 11 мая 2018

У меня есть наблюдаемое, которое испускает длинные значения. Как только я получу длинное значение> 0, мне просто нужно прервать выбросы и нажать onComplete. Есть ли лучший способ сделать это, чем способ взлома, который я сделал

long id = -1l;
 methodA()
    .subscribeOn(Schedulers.io())
    .flatMapObservable(list -> Observable.from(list))
    .flatMap(eachObject -> methodB(eachObject))
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Subscriber<Long>() {
            @Override
            public void onCompleted() {
                //some callbacks
            }
            @Override
           public void onError(Throwable e) {
                //just say error
           }
           @Override
           public void onNext(Long mId) {
                   if (id < 0) {
                    id = mId;
                   }
           }
  });

1 Ответ

0 голосов
/ 12 мая 2018

Использование takeWhile

Возвращает объект Observable, который испускает элементы, испускаемые источником Observable, если заданное условие выполняется.

Параметры:

предикат функция, которая оценивает элемент, испускаемый источником Observable, и возвращает логическое значение

Возвращает:

Observable, который испускает элементы из источника Observable, если каждый элемент удовлетворяет условию, определенному предикатом

public Observable<T> takeWhile(final Func1<T, Boolean> predicate)
methodA()
    .subscribeOn(Schedulers.io())
    .flatMapObservable(Observable::from)
    .flatMap(this::methodB)
    .observeOn(AndroidSchedulers.mainThread())
    .takeWhile(id -> id <= 0)
    .subscribe(...);
...