簡體   English   中英

創建一個可觀測列表Rxjava 2的流

[英]create one stream of list of observables Rxjava 2

我有一個ID列表,並有一個接受ID並返回Observable<Boolean> ,它正在使用ID進行操作,如果成功,則返回true。

假設我有用戶ID(1),並且我需要使用Observable<Boolean> updateProfile(int id)方法更新他的配置文件,這沒問題,並且工作正常。

我現在需要的是為多個ID創建方法,如果所有配置文件都已更新,則返回true。 它可能具有此簽名Observable<Boolean> updateAllProfiles(int[] ids)

如何實現這樣的目標?

假設您要分別更新每個配置文件並在所有更新結束后返回true,則可以使用flatMapreduce組合:

Observable<Boolean> updateAllProfiles(Integer[] ids) {
    return Observable.from(ids)
            .flatMap(id -> updateProfile(id))
            .reduce((prevResult, currResult) -> prevResult && currResult);
}

以及用途:

updateAllProfiles(new Integer[]{0, 1, 2, 3, 4})
            .subscribe(updateAllSucceed -> { //do something with result});

這將並行觸發所有更新(假設每個更新配置文件將作用於Scheduler.io或類似的創建新線程的對象),並將累積所有結果指示並相應地返回true / false。
順便說一句,您可能要考慮Completable而不是Observable<Boolean> ,它非常適合“無效”更新方法(您可以在此處閱讀我的解釋)

  Observable<Boolean> updateAllProfiles(Integer[] ids) {
    return Observable.from(ids)
        .flatMap(id -> updateProfile(id))
        .all(success-> success);
  }

暫無
暫無

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

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