操作符參考鏈接:
https://mcxiaoke.gitbooks.io/rxdocs/content/Operators.html
1.創(chuàng)建操作符:
Create — 通過調(diào)用觀察者的方法從頭創(chuàng)建一個Observable
Defer — 在觀察者訂閱之前不創(chuàng)建這個Observable,為每一個觀察者創(chuàng)建一個新的Observable
Empty/Never/Throw — 創(chuàng)建行為受限的特殊Observable
From — 將其它的對象或數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為Observable
Interval — 創(chuàng)建一個定時發(fā)射整數(shù)序列的Observable
Just — 將對象或者對象集合轉(zhuǎn)換為一個會發(fā)射這些對象的Observable
Range — 創(chuàng)建發(fā)射指定范圍的整數(shù)序列的Observable
Repeat — 創(chuàng)建重復(fù)發(fā)射特定的數(shù)據(jù)或數(shù)據(jù)序列的Observable
Start — 創(chuàng)建發(fā)射一個函數(shù)的返回值的Observable
Timer — 創(chuàng)建在一個指定的延遲之后發(fā)射單個數(shù)據(jù)的Observable
2.變換操作符
Buffer — 緩存,可以簡單的理解為緩存,它定期從Observable收集數(shù)據(jù)到一個集合,然后把這些數(shù)據(jù)集合打包發(fā)射,而不是一次發(fā)射一個
FlatMap — 扁平映射,將Observable發(fā)射的數(shù)據(jù)變換為Observables集合,然后將這些Observable發(fā)射的數(shù)據(jù)平坦化的放進(jìn)一個單獨(dú)的Observable,可以認(rèn)為是一個將嵌套的數(shù)據(jù)結(jié)構(gòu)展開的過程。
GroupBy — 分組,將原來的Observable分拆為Observable集合,將原始Observable發(fā)射的數(shù)據(jù)按Key分組,每一個Observable發(fā)射一組不同的數(shù)據(jù)
Map — 映射,通過對序列的每一項(xiàng)都應(yīng)用一個函數(shù)變換Observable發(fā)射的數(shù)據(jù),實(shí)質(zhì)是對序列中的每一項(xiàng)執(zhí)行一個函數(shù),函數(shù)的參數(shù)就是這個數(shù)據(jù)項(xiàng)
Scan — 掃描,對Observable發(fā)射的每一項(xiàng)數(shù)據(jù)應(yīng)用一個函數(shù),然后按順序依次發(fā)射這些值
Window — 窗口,定期將來自O(shè)bservable的數(shù)據(jù)分拆成一些Observable窗口,然后發(fā)射這些窗口,而不是每次發(fā)射一項(xiàng)。類似于Buffer,但Buffer發(fā)射的是數(shù)據(jù),Window發(fā)射的是Observable,每一個Observable發(fā)射原始Observable的數(shù)據(jù)的一個子集
3.過濾操作符
Debounce — 只有在空閑了一段時間后才發(fā)射數(shù)據(jù),通俗的說,就是如果一段時間沒有操作,就執(zhí)行一次操作
Distinct — 去重,過濾掉重復(fù)數(shù)據(jù)項(xiàng)
ElementAt — 取值,取特定位置的數(shù)據(jù)項(xiàng)
Filter — 過濾,過濾掉沒有通過謂詞測試的數(shù)據(jù)項(xiàng),只發(fā)射通過測試的
First — 首項(xiàng),只發(fā)射滿足條件的第一條數(shù)據(jù)
IgnoreElements — 忽略所有的數(shù)據(jù),只保留終止通知(onError或onCompleted)
Last — 末項(xiàng),只發(fā)射最后一條數(shù)據(jù)
Sample — 取樣,定期發(fā)射最新的數(shù)據(jù),等于是數(shù)據(jù)抽樣,有的實(shí)現(xiàn)里叫ThrottleFirst
Skip — 跳過前面的若干項(xiàng)數(shù)據(jù)
SkipLast — 跳過后面的若干項(xiàng)數(shù)據(jù)
Take — 只保留前面的若干項(xiàng)數(shù)據(jù)
TakeLast — 只保留后面的若干項(xiàng)數(shù)據(jù)
4.輔助操作符
Delay — 延遲一段時間發(fā)射結(jié)果數(shù)據(jù)
Do — 注冊一個動作占用一些Observable的生命周期事件,相當(dāng)于Mock某個操作
Materialize/Dematerialize — 將發(fā)射的數(shù)據(jù)和通知都當(dāng)做數(shù)據(jù)發(fā)射,或者反過來
ObserveOn — 指定觀察者觀察Observable的調(diào)度程序(工作線程)
Serialize — 強(qiáng)制Observable按次序發(fā)射數(shù)據(jù)并且功能是有效的
Subscribe — 收到Observable發(fā)射的數(shù)據(jù)和通知后執(zhí)行的操作
SubscribeOn — 指定Observable應(yīng)該在哪個調(diào)度程序上執(zhí)行
TimeInterval — 將一個Observable轉(zhuǎn)換為發(fā)射兩個數(shù)據(jù)之間所耗費(fèi)時間的Observable
Timeout — 添加超時機(jī)制,如果過了指定的一段時間沒有發(fā)射數(shù)據(jù),就發(fā)射一個錯誤通知
Timestamp — 給Observable發(fā)射的每個數(shù)據(jù)項(xiàng)添加一個時間戳
Using — 創(chuàng)建一個只在Observable的生命周期內(nèi)存在的一次性資源
5.布爾和條件操作符
All — 判斷Observable發(fā)射的所有的數(shù)據(jù)項(xiàng)是否都滿足某個條件
Amb — 給定多個Observable,只讓第一個發(fā)射數(shù)據(jù)的Observable發(fā)射全部數(shù)據(jù)
Contains — 判斷Observable是否會發(fā)射一個指定的數(shù)據(jù)項(xiàng)
DefaultIfEmpty — 發(fā)射來自原始Observable的數(shù)據(jù),如果原始Observable沒有發(fā)射數(shù)據(jù),就發(fā)射一個默認(rèn)數(shù)據(jù)
SequenceEqual — 判斷兩個Observable是否按相同的數(shù)據(jù)序列
SkipUntil — 丟棄原始Observable發(fā)射的數(shù)據(jù),直到第二個Observable發(fā)射了一個數(shù)據(jù),然后發(fā)射原始Observable的剩余數(shù)據(jù)
SkipWhile — 丟棄原始Observable發(fā)射的數(shù)據(jù),直到一個特定的條件為假,然后發(fā)射原始Observable剩余的數(shù)據(jù)
TakeUntil — 發(fā)射來自原始Observable的數(shù)據(jù),直到第二個Observable發(fā)射了一個數(shù)據(jù)或一個通知
TakeWhile — 發(fā)射原始Observable的數(shù)據(jù),直到一個特定的條件為真,然后跳過剩余的數(shù)據(jù)
6.算術(shù)和聚合操作符
Average — 計算Observable發(fā)射的數(shù)據(jù)序列的平均值,然后發(fā)射這個結(jié)果
Concat — 不交錯的連接多個Observable的數(shù)據(jù)
Count — 計算Observable發(fā)射的數(shù)據(jù)個數(shù),然后發(fā)射這個結(jié)果
Max — 計算并發(fā)射數(shù)據(jù)序列的最大值
Min — 計算并發(fā)射數(shù)據(jù)序列的最小值
Reduce — 按順序?qū)?shù)據(jù)序列的每一個應(yīng)用某個函數(shù),然后返回這個值
Sum — 計算并發(fā)射數(shù)據(jù)序列的和
7.連接操作符
Connect — 指示一個可連接的Observable開始發(fā)射數(shù)據(jù)給訂閱者
Publish — 將一個普通的Observable轉(zhuǎn)換為可連接的
RefCount — 使一個可連接的Observable表現(xiàn)得像一個普通的Observable
Replay — 確保所有的觀察者收到同樣的數(shù)據(jù)序列,即使他們在Observable開始發(fā)射數(shù)據(jù)之后才訂閱
8.轉(zhuǎn)換操作符
操作符決策樹
幾種主要的需求
直接創(chuàng)建一個Observable(創(chuàng)建操作)
組合多個Observable(組合操作)
對Observable發(fā)射的數(shù)據(jù)執(zhí)行變換操作(變換操作)
從Observable發(fā)射的數(shù)據(jù)中取特定的值(過濾操作)
轉(zhuǎn)發(fā)Observable的部分值(條件/布爾/過濾操作)
對Observable發(fā)射的數(shù)據(jù)序列求值(算術(shù)/聚合操作)