Note
- For English reader, please check the article which is written by Yaroslav Heriatovych.
這是一篇個人紀錄,基於RxJava2內Observable的所有函式
本頁用於決定在何種情境下使用相對應的Observable操作
已有一資料源 | 我想要訂閱 | subscribe subscribeWith foreach | ||||
並依照自訂的邏輯篩選 | foreachWhile | |||||
斷開與訂閱者間的Reference | onTerminateDetach | |||||
我想要隱藏 | hide | |||||
我想要判斷是否為空 | isEmpty | |||||
我想對每一筆 | 資料做 | 格式轉換 | map | |||
型態轉換 | cast | |||||
我想轉換資料源的資料型態 | compose to | |||||
我想使用自訂的操作 | lift | |||||
我想在 | 接受訂閱時 | 執行 | doOnSubscribe | |||
訂閱/取消訂閱時 | doOnLifecycle | |||||
有任一筆資料時 | doOnEach | |||||
有下一筆資料時 | doOnNext | |||||
完成時 | doOnCompleted | |||||
有錯誤時 | doOnError | |||||
中斷時 | doOnTerminate | |||||
完成/中斷時 | doFinally | |||||
取消訂閱時 | doOnDispose | |||||
有下一筆資料後 | 執行操作 | doAfterNext | ||||
完成/中斷後 | doAfterTerminate | |||||
我想要取資料 | 從開頭N筆/一段時間 | take | ||||
從最後N筆/一段時間 | takeLast | |||||
直到特定的一筆 | elementAt | |||||
如果沒有特定的一筆則送出錯誤訊息 | elementAtOrError | |||||
直到條件被滿足 | takeWhile | |||||
直到另一資料源有資料/條件被滿足 | takeUntil | |||||
並依照自訂邏輯篩選 | filter | |||||
並依照特定類型 | ofType | |||||
使用預設資料 | defaultIfEmpty | |||||
並重複收到相同資料 | cache | |||||
且有上限 | cacheWithInitialCapacity | |||||
不重複收到相同資料 | distinct | |||||
且依照自訂的邏輯判定 | ||||||
我想要忽略資料 | 全部 | ignoreElements | ||||
並在結束時收到通知 | blockingSubscribe | |||||
從開頭N筆/一段時間 | skip | |||||
從最後N筆/一段時間 | skipLast | |||||
直到條件被滿足 | skipWhile | |||||
直到另一資料源有資料/條件被滿足 | skipUntil | |||||
直到有不同的資料 | distinctUntilChanged | |||||
且依照自訂的邏輯判定 | ||||||
我想要 | 用自訂邏輯做迴圈計算 | 在最後輸出結果 | reduce reduceWith | |||
在每次計算同時回傳結果 | scan scanWith | |||||
進行排序 | sorted | |||||
並依照自訂的規則 | ||||||
我想將回傳的 | 資料 | 和通知打包 | materialize | |||
和與前一個資料的時間間隔打包 | timeInterval | |||||
和時間戳打包 | timestamp | |||||
做迴圈打包 | collect collectInto | |||||
通知 | 解包 | dematerialize | ||||
我想要阻塞thread | 並只取第一筆 | blockingFirst | ||||
如有多筆則丟出錯誤 | blockingSingle | |||||
並只取最後一筆 | blockingLast | |||||
並只取最新一筆 | blockingLastest | |||||
並取得一個Collection | blockingIterable | |||||
並依照順序取用 | blockingForEach | |||||
並等待最新一筆 | blockingNext | |||||
並直接取用最新一筆 | blockingMostRecent | |||||
我想在一段時間的停頓後 | 丟出一個錯誤訊息 | timeout | ||||
切換到其他資料源 | ||||||
我想要確保只會有一筆資料 | 如果有多筆或零筆資料則丟出錯誤訊息 | single singleElement singleOrError | ||||
我想要只取第一筆資料 | first firstElement | |||||
如果沒有資料則丟出錯誤 | firstOrError | |||||
在一段時間內 | throttleFirst | |||||
我想要只取最後一筆資料 | last lastElement | |||||
在一段時間內 | throttleLast | |||||
如果沒有資料則丟出錯誤 | lastOrError | |||||
我想要計算有幾筆資料 | count | |||||
我想要知道是否有包含某筆資料 | contains | |||||
我想要知道其中 | 任一筆資料 | 是否符合條件 | any | |||
每一筆資料 | all | |||||
我想要延遲 | 訂閱資料 | 的時機 | delaySubscription | |||
發送資料 | delay | |||||
並依照自訂的時間 | ||||||
並依照自訂的規則 | ||||||
如延遲期間有新資料則更新 | debounce throttleWithTimeout | |||||
轉成Map | toMap | |||||
轉成MultiMap | toMultimap | |||||
轉成List | toList | |||||
轉成SortedList | toSortedList | |||||
轉成Flowable | toFlowable | |||||
轉成Future | toFuture | |||||
依照自訂的邏輯 | 分組並轉成Collection | buffer | ||||
依照特定數量 | ||||||
依照時間 | ||||||
依照時間或是計數滿, 取先滿足的條件 | 分組並轉成多個資料源 | window | ||||
依照另一資料源 | 送出資料 | 的時間點 | ||||
開啟關閉 | ||||||
依照自訂的邏輯 | 分組送出資料 | groupBy | ||||
我想要根據每筆資料開一個新的資料源 | 並同時針對onNext, onError和onCompleted建立資料源送出資料 | flatMap | ||||
並匯流當前資料和新的資料源的資料 | ||||||
並同時 | 送出資料 | |||||
並在全部資料源完成/結束時才收到通知 | flatMapCompletable | |||||
並依照順序 | concatMap | |||||
並轉成Collection | concatMapIterable | |||||
而在有資料源出錯時, 全部結束後才送出錯誤訊息 | concatMapDelayError | |||||
並轉成Maybe | flatMapMaybe | |||||
並轉成Single | flatMapSingle | |||||
並轉成Collection, 並與當前資料匯流 | flatMapIterable | |||||
並在取得新資料後使用新開的資料源 | switchMap switchMapSingle | |||||
而在有資料源出錯時, 全部結束後才送出錯誤訊息 | switchMapDelayError switchMapSingleDelayError | |||||
並同步啟用但依照順序送出資料 | concatMapEager | |||||
而在有資料源出錯時, 全部結束後才送出錯誤訊息 | concatMapEagerDelayError | |||||
我想要發佈資料 | 且預先經過一特定操作 | publish | ||||
並提供最新的資料 | 給新訂閱者 | |||||
並重複提供已收到的資料 | 且經過型態轉換 | replay | ||||
且經過延遲 | ||||||
且只暫存一定數量 | ||||||
且在不同的thread上 | ||||||
且需要搭配connect | ||||||
並轉成普通資料源 | share | |||||
我想要在錯誤發生時 | 重新訂閱 | retry | ||||
直到條件被滿足時 | retryUntil | |||||
只在條件被滿足時 | retryWhen | |||||
回傳替代的資料 | onErrorReturn onErrorReturnItem | |||||
使用備用的資料源 | onErrorResumeNext | |||||
且是Exception引發才使用備用的資料源 | onExceptionResumeNext | |||||
我想要資料源為空時 | 使用備用的資料源 | switchIfEmpty | ||||
當資料源結束 | 我想要重新訂閱 | repeat | ||||
直到條件被滿足時 | repeatUntil | |||||
只在條件被滿足時 | repeatWhen | |||||
我想要在選定的thread上 | 訂閱資料源 | subscribeOn | ||||
取消訂閱 | unsubscribeOn | |||||
取得資料 | observeOn | |||||
使用兩個 | 一般資料源 | 我想從 | 先有資料的資料源 | 取得資料 | amb ambArray ambWith | |
最新啟動的資料源 | 並且只有當第一個資料源有資料時,才送出資料 | switchOnNext switchOnNextDelayError | ||||
我想判斷兩邊資料是否相同 | sequenceEqual | |||||
我想要合併資料 | 並且只有當第一個資料源有資料時,才送出資料 | withLatestFrom | ||||
並且當資料不變時,重複使用最新的資料 | combineLatest | |||||
而在有資料源出錯時, 全部結束後才送出錯誤訊息 | combineLatestDelayError | |||||
並且依照順序啟用 | concat concatWith concatArray | |||||
而在有資料源出錯時, 全部結束後才送出錯誤訊息 | concatDelayError concatArrayDelayError | |||||
並且同步啟用, 但依照順序送出資料 | concatEager concatArrayEager | |||||
並每筆資料僅使用一次 | zip zipWith | |||||
且資料 | 用陣列傳入 | zipArray | ||||
用Collection傳入 | zipIterable | |||||
並且當有資料的存活時間重疊時 | 回傳每筆資料合併 | join | ||||
以第一資料源為主, 給予合併第二資料源的資料 | groupJoin | |||||
我想要只取最新一筆資料 | 在另一個資料源回傳時 | sample | ||||
在一段時間內 | ||||||
我想要整合兩邊的資料 | merge mergeArray mergeWith | |||||
而在有資料源出錯時, 全部結束後才送出錯誤訊息 | mergeDelayError mergeArrayDelayError | |||||
同步資料源 | 我想要合併資料 | 序列化 | Serialize |