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
斷開與訂閱者間的ReferenceonTerminateDetach
我想要隱藏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
並取得一個CollectionblockingIterable
並依照順序取用blockingForEach
並等待最新一筆blockingNext
並直接取用最新一筆blockingMostRecent
我想在一段時間的停頓後丟出一個錯誤訊息timeout
切換到其他資料源
我想要確保只會有一筆資料如果有多筆或零筆資料則丟出錯誤訊息single
singleElement
singleOrError
我想要只取第一筆資料first
firstElement
如果沒有資料則丟出錯誤firstOrError
在一段時間內throttleFirst
我想要只取最後一筆資料last
lastElement
在一段時間內throttleLast
如果沒有資料則丟出錯誤lastOrError
我想要計算有幾筆資料count
我想要知道是否有包含某筆資料contains
我想要知道其中任一筆資料是否符合條件any
每一筆資料all
我想要延遲訂閱資料的時機delaySubscription
發送資料delay
並依照自訂的時間
並依照自訂的規則
如延遲期間有新資料則更新debounce
throttleWithTimeout
轉成MaptoMap
轉成MultiMaptoMultimap
轉成ListtoList
轉成SortedListtoSortedList
轉成FlowabletoFlowable
轉成FuturetoFuture
依照自訂的邏輯分組並轉成Collectionbuffer
依照特定數量
依照時間
依照時間或是計數滿, 取先滿足的條件分組並轉成多個資料源window
依照另一資料源送出資料的時間點
開啟關閉
依照自訂的邏輯分組送出資料groupBy
我想要根據每筆資料開一個新的資料源並同時針對onNext, onError和onCompleted建立資料源送出資料flatMap
並匯流當前資料和新的資料源的資料
並同時送出資料
並在全部資料源完成/結束時才收到通知flatMapCompletable
並依照順序concatMap
並轉成CollectionconcatMapIterable
而在有資料源出錯時, 全部結束後才送出錯誤訊息concatMapDelayError
並轉成MaybeflatMapMaybe
並轉成SingleflatMapSingle
並轉成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