[英]Concat multiple observables to one source
我有很多發出不同類型的網絡調用,例如字符串、整數等。
我試圖讓它們平行。
在官方 rxjava 文檔中,我們可以閱讀:
Flowable.range(1, 10)
.parallel()
.runOn(Schedulers.computation())
.map(v -> v * v)
.sequential()
.blockingSubscribe(System.out::println);
這個例子很簡單,因為我們將所有類型都設為 Int。 但是,如果我們有不同的類型,例如字符串、boolean、Int,該怎么辦?
string
結合 Observables
使用多個源 Observable 來創建單個 Observable 的操作符
And/Then/When — 通過 Pattern 和 Plan 中介組合兩個或多個 Observable 發出的項目集
CombineLatest — 當兩個 Observable 中的任何一個發出項目時,通過指定的 function 組合每個 Observable 發出的最新項目,並根據 function 的結果發射項目
Join — 結合兩個 Observable 發出的項
合並——通過合並它們的發射將多個 Observable 合並為一個
StartWith — 在開始從源 Observable 發射項目之前發射指定的項目序列
Switch — 將發出 Observables 的 Observable 轉換為單個 Observable,該 Observable 發出由最近發出的那些 Observables 發出的項目
Zip — 通過指定的 function 將多個 Observable 的發射組合在一起,並根據此 function 的結果為每個組合發射單個項目
我認為在您的情況下,您可以使用zip
或combineLatest
閱讀本文檔http://reactivex.io/documentation/operators.html#combining
我想你也需要知道
RxJava 調度器簡介。
Schedulers.io() - 這用於執行非 CPU 密集型操作,例如進行網絡調用、讀取磁盤/文件、數據庫操作等,它維護一個線程池。
Schedulers.newThread() - 使用它,每次調度任務時都會創建一個新線程。 通常建議不要使用調度程序,除非有一個非常長時間運行的操作。 通過 newThread() 創建的線程不會被重用。
Schedulers.computation() - 此調度可用於執行 CPU 密集型操作,例如處理大量數據、bitmap 處理等,使用此調度器創建的線程數完全取決於可用的 CPU 內核數。
Schedulers.single() - 此調度程序將按添加的順序執行所有任務。 這可以在需要順序執行時使用。
Schedulers.immediate() - 此調度程序通過阻塞主線程以同步方式立即執行任務。
Schedulers.trampoline() - 它以先進先出的方式執行任務。 通過將后台線程的數量限制為1個,所有的計划任務將被一個一個地執行。
Schedulers.from() - 這允許我們通過限制要創建的線程數從執行程序創建調度程序。 當線程池被占用時,任務會排隊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.