Instance Operator Decision Table

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