RxJava操作符匯總

  • 這個頁面展示了創建Observable的各種方法。

**just(?)
**
— 將一個或多個對象轉換成發射這個或這些對象的一個Observable
**from(?)
**
— 將一個Iterable, 一個Future, 或者一個數組轉換成一個Observable
**repeat(?)
**
— 創建一個重復發射指定數據或數據序列的Observable
**repeatWhen(?)
**
— 創建一個重復發射指定數據或數據序列的Observable,它依賴于另一個Observable發射的數據
**create(?)
**
— 使用一個函數從頭創建一個Observable
**defer(?)
**
— 只有當訂閱者訂閱才創建Observable;為每個訂閱創建一個新的Observable
**range(?)
**
— 創建一個發射指定范圍的整數序列的Observable
**interval(?)
**
— 創建一個按照給定的時間間隔發射整數序列的Observable
**timer(?)
**
— 創建一個在給定的延時之后發射單個數據的Observable
**empty(?)
**
— 創建一個什么都不做直接通知完成的Observable
**error(?)
**
— 創建一個什么都不做直接通知錯誤的Observable
**never(?)
**
— 創建一個不發射任何數據的Observable

  • 這個頁面展示了可用于對Observable發射的數據執行變換操作的各種操作符。

**map(?)
**
— 對序列的每一項都應用一個函數來變換Observable發射的數據序列
flatMap(?), concatMap(?), and flatMapIterable(?) — 將Observable發射的數據集合變換為Observables集合,然后將這些Observable發射的數據平坦化的放進一個單獨的Observable
**switchMap(?)
**
— 將Observable發射的數據集合變換為Observables集合,然后只發射這些Observables最近發射的數據
**scan(?)
**
— 對Observable發射的每一項數據應用一個函數,然后按順序依次發射每一個值
**groupBy(?)
**
— 將Observable分拆為Observable集合,將原始Observable發射的數據按Key分組,每一個Observable發射一組不同的數據
**buffer(?)
**
— 它定期從Observable收集數據到一個集合,然后把這些數據集合打包發射,而不是一次發射一個
**window(?)
**
— 定期將來自Observable的數據分拆成一些Observable窗口,然后發射這些窗口,而不是每次發射一項
**cast(?)
**
— 在發射之前強制將Observable發射的所有數據轉換為指定類型

  • 這個頁面展示的操作符可用于過濾和選擇Observable發射的數據序列。

**filter(?)
**
— 過濾數據
**takeLast(?)
**
— 只發射最后的N項數據
**last(?)
**
— 只發射最后的一項數據
**lastOrDefault(?)
**
— 只發射最后的一項數據,如果Observable為空就發射默認值
**takeLastBuffer(?)
**
— 將最后的N項數據當做單個數據發射
**skip(?)
**
— 跳過開始的N項數據
**skipLast(?)
**
— 跳過最后的N項數據
**take(?)
**
— 只發射開始的N項數據
**first(?)
and takeFirst(?)
**
— 只發射第一項數據,或者滿足某種條件的第一項數據
**firstOrDefault(?)
**
— 只發射第一項數據,如果Observable為空就發射默認值
**elementAt(?)
**
— 發射第N項數據
**elementAtOrDefault(?)
**
— 發射第N項數據,如果Observable數據少于N項就發射默認值
**sample(?)
or throttleLast(?)
**
— 定期發射Observable最近的數據
**throttleFirst(?)
**
— 定期發射Observable發射的第一項數據
**throttleWithTimeout(?)
or debounce(?)
**
— 只有當Observable在指定的時間后還沒有發射數據時,才發射一個數據
**timeout(?)
**
— 如果在一個指定的時間段后還沒發射數據,就發射一個異常
**distinct(?)
**
— 過濾掉重復數據
**distinctUntilChanged(?)
**
— 過濾掉連續重復的數據
**ofType(?)
**
— 只發射指定類型的數據
**ignoreElements(?)
**
— 丟棄所有的正常數據,只發射錯誤或完成通知

  • 這個頁面展示的操作符可用于組合多個Observables。

**startWith(?)
**
— 在數據序列的開頭增加一項數據
**merge(?)
**
— 將多個Observable合并為一個
**mergeDelayError(?)
**
— 合并多個Observables,讓沒有錯誤的Observable都完成后再發射錯誤通知
**zip(?)
**
— 使用一個函數組合多個Observable發射的數據集合,然后再發射這個結果
**and(?)
, then(?)
, and when(?)
**
— (rxjava-joins
) 通過模式和計劃組合多個Observables發射的數據集合
**combineLatest(?)
**
— 當兩個Observables中的任何一個發射了一個數據時,通過一個指定的函數組合每個Observable發射的最新數據(一共兩個數據),然后發射這個函數的結果
**join(?)
and groupJoin(?)
**
— 無論何時,如果一個Observable發射了一個數據項,只要在另一個Observable發射的數據項定義的時間窗口內,就將兩個Observable發射的數據合并發射
**switchOnNext(?)
**
— 將一個發射Observables的Observable轉換成另一個Observable,后者發射這些Observables最近發射的數據
(rxjava-joins) — 表示這個操作符當前是可選的rxjava-joins包的一部分,還沒有包含在標準的RxJava操作符集合里

很多操作符可用于對Observable發射的onError
通知做出響應或者從錯誤中恢復,例如,你可以:
吞掉這個錯誤,切換到一個備用的Observable繼續發射數據
吞掉這個錯誤然后發射默認值
吞掉這個錯誤并立即嘗試重啟這個Observable
吞掉這個錯誤,在一些回退間隔后重啟這個Observable
這是操作符列表:
**onErrorResumeNext(?)
**
— 指示Observable在遇到錯誤時發射一個數據序列
**onErrorReturn(?)
**
— 指示Observable在遇到錯誤時發射一個特定的數據
**onExceptionResumeNext(?)
**
— instructs an Observable to continue emitting items after it encounters an exception (but not another variety of throwable)指示Observable遇到錯誤時繼續發射數據
**retry(?)
**
— 指示Observable遇到錯誤時重試
**retryWhen(?)
**
— 指示Observable遇到錯誤時,將錯誤傳遞給另一個Observable來決定是否要重新給訂閱這個Observable

  • 這個頁面列出了很多用于Observable的輔助操作符

**materialize(?)
**
— 將Observable轉換成一個通知列表convert an Observable into a list of Notifications
**dematerialize(?)
**
— 將上面的結果逆轉回一個Observable
**timestamp(?)
**
— 給Observable發射的每個數據項添加一個時間戳
**serialize(?)
**
— 強制Observable按次序發射數據并且要求功能是完好的
**cache(?)
**
— 記住Observable發射的數據序列并發射相同的數據序列給后續的訂閱者
**observeOn(?)
**
— 指定觀察者觀察Observable的調度器
**subscribeOn(?)
**
— 指定Observable執行任務的調度器
**doOnEach(?)
**
— 注冊一個動作,對Observable發射的每個數據項使用
**doOnCompleted(?)
**
— 注冊一個動作,對正常完成的Observable使用
**doOnError(?)
**
— 注冊一個動作,對發生錯誤的Observable使用
**doOnTerminate(?)
**
— 注冊一個動作,對完成的Observable使用,無論是否發生錯誤
**doOnSubscribe(?)
**
— 注冊一個動作,在觀察者訂閱時使用
**doOnUnsubscribe(?)
**
— 注冊一個動作,在觀察者取消訂閱時使用
**finallyDo(?)
**
— 注冊一個動作,在Observable完成時使用
**delay(?)
**
— 延時發射Observable的結果
**delaySubscription(?)
**
— 延時處理訂閱請求
**timeInterval(?)
**
— 定期發射數據
**using(?)
**
— 創建一個只在Observable生命周期存在的資源
**single(?)
**
— 強制返回單個數據,否則拋出異常
**singleOrDefault(?)
**
— 如果Observable完成時返回了單個數據,就返回它,否則返回默認數據
**toFuture(?)
**, **toIterable(?)
**, **toList(?)
**
— 將Observable轉換為其它對象或數據結構

  • 這個頁面的操作符可用于根據條件發射或變換Observables,或者對它們做布爾運算:

  • 條件操作符

**amb(?)
**
— 給定多個Observable,只讓第一個發射數據的Observable發射全部數據
**defaultIfEmpty(?)
**
— 發射來自原始Observable的數據,如果原始Observable沒有發射數據,就發射一個默認數據
(rxjava-computation-expressions
) **doWhile(?)
**
— 發射原始Observable的數據序列,然后重復發射這個序列直到不滿足這個條件為止
(rxjava-computation-expressions
) **ifThen(?)
**
— 只有當某個條件為真時才發射原始Observable的數據序列,否則發射一個空的或默認的序列
**skipUntil(?)
**
— 丟棄原始Observable發射的數據,直到第二個Observable發射了一個數據,然后發射原始Observable的剩余數據
**skipWhile(?)
**
— 丟棄原始Observable發射的數據,直到一個特定的條件為假,然后發射原始Observable剩余的數據
(rxjava-computation-expressions
) **switchCase(?)
**
— 基于一個計算結果,發射一個指定Observable的數據序列
**takeUntil(?)
**
— 發射來自原始Observable的數據,直到第二個Observable發射了一個數據或一個通知
**takeWhile(?)
and takeWhileWithIndex(?)
**
— 發射原始Observable的數據,直到一個特定的條件為真,然后跳過剩余的數據
(rxjava-computation-expressions
) **whileDo(?)
**
— if a condition is true, emit the source Observable's sequence and then repeat the sequence as long as the condition remains true如果滿足一個條件,發射原始Observable的數據,然后重復發射直到不滿足這個條件為止
(rxjava-computation-expressions) — 表示這個操作符當前是可選包 rxjava-computation-expressions
的一部分,還沒有包含在標準RxJava的操作符集合里

  • 布爾操作符

**all(?)
**
— 判斷是否所有的數據項都滿足某個條件
**contains(?)
**
— 判斷Observable是否會發射一個指定的值
**exists(?)
and isEmpty(?)
**
— 判斷Observable是否發射了一個值
**sequenceEqual(?)
**
— test the equality of the sequences emitted by two Observables判斷兩個Observables發射的序列是否相等

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本篇文章介主要紹RxJava中操作符是以函數作為基本單位,與響應式編程作為結合使用的,對什么是操作、操作符都有哪些...
    嘎啦果安卓獸閱讀 2,890評論 0 10
  • 創建操作 用于創建Observable的操作符Create通過調用觀察者的方法從頭創建一個ObservableEm...
    rkua閱讀 1,863評論 0 1
  • 作者: maplejaw本篇只解析標準包中的操作符。對于擴展包,由于使用率較低,如有需求,請讀者自行查閱文檔。 創...
    maplejaw_閱讀 45,780評論 8 93
  • RxJava正在Android開發者中變的越來越流行。唯一的問題就是上手不容易,尤其是大部分人之前都是使用命令式編...
    劉啟敏閱讀 1,898評論 1 7
  • 注:只包含標準包中的操作符,用于個人學習及備忘參考博客:http://blog.csdn.net/maplejaw...
    小白要超神閱讀 2,226評論 2 8