ReactiveX系列
ReactiveX 是http://reactivex.io提供的響應式框架,採用觀察者模式+鏈式api構成,目前支持語言如下:
ReactiveX系列翻譯,僅翻譯通用篇,共計5篇內容:
- Observable
- Operators
- Single
- Subject
- Scheduler
只有理解了這五大內容,學習起來才會有目標和場景。以後不管你去使用RxJava,還是RxSwift,中心思想不會跳出這些內容。
本文是第二篇:操作符
簡述了常用的操作符的作用
正文
在ReactiveX的不同語言實現中,都會提供一系列操作符。儘管大部分操作符,每種語言都實現了,但是還是有少部分是某種語言特有的。因此。每種語言在操作符命名上都是根據語言本身類似的操作符名稱。
- 鏈式操作符:大多數運算符都在Observable上運行並返回一個Observable。這樣使得你可以採用鏈式調用把這些操作符穿起來。在一個鏈中,鏈中的每個運算符都會修改由前一個運算符的運算產生的Observable。當然,還有其他模式,比如Builder模式,在Builder模式中,鏈的操作符順序就沒有那麼重要了。
- ReactiveX操作符:本文將為你列舉ReactiveX中的核心操作符以及他們的詳細介紹鏈接。並且提供一個決策樹,幫你在實際中選擇使用那些操作符。最後,在ReactiveX的許多特定於語言的實現中,有一個按字母順序排列的大多數運算符列表。
- 一、新建Observable:
發起新Observables的運營商。
- Create:創建一個新的Observable
- Defer:在觀察者訂閱之前不要創建Observable,併為每個觀察者創建一個新的Observable
- Empty/Never/Throw :創建具有非常精確和有限行為的Observable
- From:將一些其他對象或數據結構轉換為Observable
- Interval:創建一個Observable,它發出一個由特定時間間隔隔開的整數序列
- Just:將對象或一組對象轉換為發出該對象或那些對象的Observable
- Range:創建一個發出一系列連續整數的Observable
- Repeat:創建一個Observable,重複發出特定項目或項目序列
- Start:創建一個發出函數返回值的Observable
- Timer:創建一個在給定延遲後發出單個項目的Observable
- 二、轉換Observable:
轉換Observable發出的項的運算符。
- Buffer:定期將Observable中的項目收集到捆綁包中併發出這些捆綁包,而不是一次發送一個項目
- FlatMap:將Observable發出的項目轉換為Observables,然後將這些項目的排放量變為單個Observable
- GroupBy:將Observable劃分為一組Observable,每個Observable從原始Observable發出不同的項目組,按鍵組織
- Map:通過將函數應用於每個項目來轉換Observable發出的項目
- Scan:將函數應用於Observable發出的每個項目,按順序,併發出每個連續的值
- Window:定期將Observable中的項目細分為Observable窗口併發出這些窗口,而不是一次發出一個項目
- 三、過濾Observable:
有選擇地從源Observable中發出項的運算符。
- Debounce:如果特定的時間跨度已經過去而沒有發出另一個項目,則只從Observable中發出一個項目
- Distinct:抑制Observable發出的重複項
- ElementAt:僅發出Observable發出的項目n
- Filter:僅發出通過特定條件的Observable中的那些項
- First:從Observable中僅發出第一個項目或滿足條件的第一個項目
- IgnoreElements:不從Observable中發出任何項目,但鏡像其終止通知
- Last:僅發出Observable發出的最後一項
- Sample:在週期性時間間隔內發出Observable發出的最新項目
- Skip:抑制Observable發出的前n個項目
- SkipLast:抑制Observable發出的最後n個項目
- Take: 僅發出Observable發出的前n個項目
- TakeLast:僅發出Observable發出的最後n個項目
- 四、合併Observable:
使用多個源Observable創建單個Observable的運算符
- And/Then/When:通過模式和計劃中介組合兩個或多個Observable發出的項目集
- CombineLatest:當一個項目由兩個Observable中的任何一個發出時,通過指定的函數組合每個Observable發出的最新項目,並根據此函數的結果發出項目
- Join:在根據另一個Observable發出的項目定義的時間窗口期間發出一個Observable中的項目時,組合兩個Observable發出的項目
- Merge:通過合併它們的排放,將多個Observable組合成一個
- StartWith:在開始從源Observable中發出項之前,發出指定的項序列
- Switch:將發出Observables的Observable轉換為單個Observable,該Observable發出最近發出的Observables發出的項目
- Zip:通過指定的功能將多個Observable的排放組合在一起,並根據此功能的結果為每個組合發出單個項目
- 五、錯誤處理:
有助於從Observable中恢復錯誤通知的操作員
- Catch:通過繼續序列而不出錯來從onError通知中恢復
- Retry:如果源Observable發送onError通知,則重新訂閱它,希望它能完成而不會出錯
- 六、常用工具:
用於處理Observable的有用運算符的工具箱
- Delay:將Observable的排放量及時轉移一定量
- Do:註冊一個動作來承擔各種Observable生命週期事件
- Materialize/Dematerialize:表示發出的項目和作為發出項目發送的通知,或者反轉此過程
- ObserveOn:指定觀察者將觀察此Observable的調度程序
- Serialize:強制Observable進行序列化調用並保持良好狀態
- Subscribe:對觀察者的排放和通知進行操作
- SubscribeOn: 指定Observable在訂閱時應使用的調度程序
- TimeInterval:將發射物品的Observable轉換為發出這些發射之間經過的時間量的指示的Observable
- Timeout:鏡像源Observable,但是如果在沒有任何發出的項目的情況下經過了特定的時間段,則發出錯誤通知
- Timestamp:將時間戳附加到Observable發出的每個項目
- Using:創建一個與Observable具有相同生命週期的可支配資源
- 七、條件Observable:
評估Observables發出的一個或多個Observable或項目的運算符
- All:確定Observable發出的所有項目是否符合某些標準
- Amb:給定兩個或多個源Observable,僅從第一個Observable中發出所有項目以發出項目
- Contains:確定Observable是否發出特定項目
- DefaultIfEmpty:從源Observable發出項目,如果源Observable不發出任何內容,則發出默認項目
- SequenceEqual:確定兩個Observable是否發出相同的項目序列
- SkipUntil:丟棄Observable發出的項目,直到第二個Observable發出項目為止
- SkipWhile:丟棄Observable發出的項目,直到指定的條件變為false
- TakeUntil:在第二個Observable發出項目或終止後,丟棄Observable發出的項目
- TakeWhile:在指定條件變為false後丟棄Observable發出的項目
- 八、數學運算:
操作Observable發出的整個項目序列的運算符
- Average: 計算Observable發出的數字的平均值併發出此平均值
- Concat:從兩個或多個Observable發射發射而不交錯
- Count:計算源Observable發出的項目數,並僅發出此值
- Max:確定併發出Observable發出的最大值項
- Min:確定併發出Observable發出的最小值項
- Reduce:按順序將一個函數應用於Observable發出的每個項目,併發出最終值
- Sum:計算Observable發出的數字之和併發出此總和
- 九、背壓:
處理Observables的策略比觀察者消耗它們更快
- 十、連接:
具有更精確控制的訂閱動態的特殊觀察者
- Connect:指示可連接的Observable開始向其訂戶發送項目
- Publish:將普通的Observable轉換為可連接的Observable
- RefCount:使Connectable Observable的行為類似於普通的Observable
- Replay:確保所有觀察者都看到相同的發射物品序列,即使他們在Observable開始發射物品後訂閱
- 十一、轉化:
- To:將Observable轉換為另一個對象或數據結構
此樹可以幫助您找到您正在尋找的ReactiveX Observable運算符
(由於排版問題,暫時不發佈)
總結
操作符是整個ReactiveX系列最常用的功能,通過這一篇文章可以解決你大部分問題。篇幅過長,適合收藏。在你忘記怎麼使用的時候,可以翻翻,也許就找到思路了。
閱讀更多 全職碼農 的文章