本文首先會給出ReactiveX的核心操作符列表和對應的文檔鏈接,後面還有壹個決策樹用於幫助妳根據具體的場景選擇合適的操作符。最後有壹個語言特定實現的按字母排序的操作符列表。
如果妳想實現妳自己的操作符,可以參考這裏:實現自定義操作符
創建操作
用於創建Observable的操作符
Create — 通過調用觀察者的方法從頭創建壹個Observable
Defer — 在觀察者訂閱之前不創建這個Observable,為每壹個觀察者創建壹個新的Observable
Empty/Never/Throw — 創建行為受限的特殊Observable
From — 將其它的對象或數據結構轉換為Observable
Interval — 創建壹個定時發射整數序列的Observable
Just — 將對象或者對象集合轉換為壹個會發射這些對象的Observable
Range — 創建發射指定範圍的整數序列的Observable
Repeat — 創建重復發射特定的數據或數據序列的Observable
Start — 創建發射壹個函數的返回值的Observable
Timer — 創建在壹個指定的延遲之後發射單個數據的Observable
變換操作
這些操作符可用於對Observable發射的數據進行變換,詳細解釋可以看每個操作符的文檔
Buffer — 緩存,可以簡單的理解為緩存,它定期從Observable收集數據到壹個集合,然後把這些數據集合打包發射,而不是壹次發射壹個
FlatMap — 扁平映射,將Observable發射的數據變換為Observables集合,然後將這些Observable發射的數據平坦化的放進壹個單獨的Observable,可以認為是壹個將嵌套的數據結構展開的過程。
GroupBy — 分組,將原來的Observable分拆為Observable集合,將原始Observable發射的數據按Key分組,每壹個Observable發射壹組不同的數據
Map — 映射,通過對序列的每壹項都應用壹個函數變換Observable發射的數據,實質是對序列中的每壹項執行壹個函數,函數的參數就是這個數據項
Scan — 掃描,對Observable發射的每壹項數據應用壹個函數,然後按順序依次發射這些值
Window
—
窗口,定期將來自Observable的數據分拆成壹些Observable窗口,然後發射這些窗口,而不是每次發射壹項。類似於Buffer,但
Buffer發射的是數據,Window發射的是Observable,每壹個Observable發射原始Observable的數據的壹個子集
過濾操作
這些操作符用於從Observable發射的數據中進行選擇
Debounce — 只有在空閑了壹段時間後才發射數據,通俗的說,就是如果壹段時間沒有操作,就執行壹次操作
Distinct — 去重,過濾掉重復數據項
ElementAt — 取值,取特定位置的數據項
Filter — 過濾,過濾掉沒有通過謂詞測試的數據項,只發射通過測試的
First — 首項,只發射滿足條件的第壹條數據
IgnoreElements — 忽略所有的數據,只保留終止通知(onError或onCompleted)
Last — 末項,只發射最後壹條數據
Sample — 取樣,定期發射最新的數據,等於是數據抽樣,有的實現裏叫ThrottleFirst
Skip — 跳過前面的若幹項數據
SkipLast — 跳過後面的若幹項數據
Take — 只保留前面的若幹項數據
TakeLast — 只保留後面的若幹項數據
組合操作
組合操作符用於將多個Observable組合成壹個單壹的Observable
And/Then/When — 通過模式(And條件)和計劃(Then次序)組合兩個或多個Observable發射的數據集
CombineLatest — 當兩個Observables中的任何壹個發射了壹個數據時,通過壹個指定的函數組合每個Observable發射的最新數據(壹***兩個數據),然後發射這個函數的結果
Join — 無論何時,如果壹個Observable發射了壹個數據項,只要在另壹個Observable發射的數據項定義的時間窗口內,就將兩個Observable發射的數據合並發射
Merge — 將兩個Observable發射的數據組合並成壹個
StartWith — 在發射原來的Observable的數據序列之前,先發射壹個指定的數據序列或數據項
Switch — 將壹個發射Observable序列的Observable轉換為這樣壹個Observable:它逐個發射那些Observable最近發射的數據
Zip — 打包,使用壹個指定的函數將多個Observable發射的數據組合在壹起,然後將這個函數的結果作為單項數據發射
錯誤處理
這些操作符用於從錯誤通知中恢復
Catch — 捕獲,繼續序列操作,將錯誤替換為正常的數據,從onError通知中恢復
Retry — 重試,如果Observable發射了壹個錯誤通知,重新訂閱它,期待它正常終止
輔助操作
壹組用於處理Observable的操作符
Delay — 延遲壹段時間發射結果數據
Do — 註冊壹個動作占用壹些Observable的生命周期事件,相當於Mock某個操作
Materialize/Dematerialize — 將發射的數據和通知都當做數據發射,或者反過來
ObserveOn — 指定觀察者觀察Observable的調度程序(工作線程)
Serialize — 強制Observable按次序發射數據並且功能是有效的
Subscribe — 收到Observable發射的數據和通知後執行的操作
SubscribeOn — 指定Observable應該在哪個調度程序上執行
TimeInterval — 將壹個Observable轉換為發射兩個數據之間所耗費時間的Observable
Timeout — 添加超時機制,如果過了指定的壹段時間沒有發射數據,就發射壹個錯誤通知
Timestamp — 給Observable發射的每個數據項添加壹個時間戳
Using — 創建壹個只在Observable的生命周期內存在的壹次性資源
條件和布爾操作
這些操作符可用於單個或多個數據項,也可用於Observable
All — 判斷Observable發射的所有的數據項是否都滿足某個條件
Amb — 給定多個Observable,只讓第壹個發射數據的Observable發射全部數據
Contains — 判斷Observable是否會發射壹個指定的數據項
DefaultIfEmpty — 發射來自原始Observable的數據,如果原始Observable沒有發射數據,就發射壹個默認數據
SequenceEqual — 判斷兩個Observable是否按相同的數據序列
SkipUntil — 丟棄原始Observable發射的數據,直到第二個Observable發射了壹個數據,然後發射原始Observable的剩余數據
SkipWhile — 丟棄原始Observable發射的數據,直到壹個特定的條件為假,然後發射原始Observable剩余的數據
TakeUntil — 發射來自原始Observable的數據,直到第二個Observable發射了壹個數據或壹個通知
TakeWhile — 發射原始Observable的數據,直到壹個特定的條件為真,然後跳過剩余的數據
算術和聚合操作
這些操作符可用於整個數據序列
Average — 計算Observable發射的數據序列的平均值,然後發射這個結果
Concat — 不交錯的連接多個Observable的數據
Count — 計算Observable發射的數據個數,然後發射這個結果
Max — 計算並發射數據序列的最大值
Min — 計算並發射數據序列的最小值
Reduce — 按順序對數據序列的每壹個應用某個函數,然後返回這個值
Sum — 計算並發射數據序列的和
連接操作
壹些有精確可控的訂閱行為的特殊Observable
Connect — 指示壹個可連接的Observable開始發射數據給訂閱者
Publish — 將壹個普通的Observable轉換為可連接的
RefCount — 使壹個可連接的Observable表現得像壹個普通的Observable
Replay — 確保所有的觀察者收到同樣的數據序列,即使他們在Observable開始發射數據之後才訂閱
轉換操作
To — 將Observable轉換為其它的對象或數據結構
Blocking 阻塞Observable的操作符
操作符決策樹
幾種主要的需求
直接創建壹個Observable(創建操作)
組合多個Observable(組合操作)
對Observable發射的數據執行變換操作(變換操作)
從Observable發射的數據中取特定的值(過濾操作)
轉發Observable的部分值(條件/布爾/過濾操作)
對Observable發射的數據序列求值(算術/聚合操作)