簡體   English   中英

RxJava突破

[英]RxJava break onNext

我有一個觀察到的發出長值。 一旦我收到一個大於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;
                   }
           }
  });

使用takeWhile

返回一個Observable,只要指定條件為true,該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(...);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM