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 | |||