淺談RxJava

1.Observable 的創(chuàng)建

? ? 1.create: 使用OnSubscribe從頭創(chuàng)建一個(gè)Observable,這種方法比較簡單。需要注意的是,使用該方法創(chuàng)建時(shí),建議在OnSubscribe#call方法中檢查訂閱狀態(tài),以便及時(shí)停止發(fā)射數(shù)據(jù)或者運(yùn)算。? 2.from: 將一個(gè)Iterable, 一個(gè)Future, 或者一個(gè)數(shù)組,內(nèi)部通過代理的方式轉(zhuǎn)換成一個(gè)Observable。Future轉(zhuǎn)換為OnSubscribe是通過OnSubscribeToObservableFuture進(jìn)行的,Iterable轉(zhuǎn)換通過OnSubscribeFromIterable進(jìn)行。數(shù)組通過OnSubscribeFromArray轉(zhuǎn)換(遍歷集合)。


? ?3.just: 將一個(gè)或多個(gè)對象轉(zhuǎn)換成發(fā)射這個(gè)或這些對象的一個(gè)Observable。如果是單個(gè)對象,內(nèi)部創(chuàng)建的是ScalarSynchronousObservable對象。如果是多個(gè)對象,則是調(diào)用了from方法創(chuàng)建。(轉(zhuǎn)換一個(gè)或者多個(gè)Object為Observable對象,如數(shù)據(jù)庫查詢,網(wǎng)絡(luò)查詢)



?? ? just()方法可傳入 1~10 個(gè)參數(shù),也就說當(dāng)元素個(gè)數(shù)小于等于 10 的時(shí)候既可以使用just()也可以使用from(),否則只能用from()方法。

4.timer:創(chuàng)建一個(gè)在給定的延時(shí)之后發(fā)射的Observable,內(nèi)部通過OnSubscribeTimerOnce工作




5.range創(chuàng)建一個(gè)發(fā)射指定范圍的整數(shù)序列的Observable



6.defer: 只有當(dāng)訂閱者訂閱才創(chuàng)建Observable,為每個(gè)訂閱創(chuàng)建一個(gè)新的Observable。內(nèi)部通過OnSubscribeDefer在訂閱時(shí)調(diào)用Func0創(chuàng)建Observable

?7.error :創(chuàng)建不發(fā)射任何數(shù)據(jù)就發(fā)出 onError 通知的 Observable 對象(在執(zhí)行過程中捕獲到異常,使用該操作符把捕獲的異常傳遞到后面的邏輯中處理)。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?8.empty: 創(chuàng)建一個(gè)什么都不做直接通知完成的Observable。

? ?9.error: 創(chuàng)建一個(gè)什么都不做直接通知錯(cuò)誤的Observable。

? ?10.never: 創(chuàng)建一個(gè)什么都不做的Observable。

2.過濾操作

? ?1.filter:過濾數(shù)據(jù)。



2.take:只發(fā)射指定數(shù)量數(shù)據(jù)或者指定時(shí)間內(nèi)的數(shù)據(jù)。



? ?3.ofType:過濾指定類型的數(shù)據(jù),與filter類似。


?4.takeLast:只發(fā)射指定數(shù)量數(shù)據(jù)或者指定時(shí)間內(nèi)的數(shù)據(jù)。takeLastBuffer和takeLast類似,不同點(diǎn)在于takeLastBuffer會收集成List后發(fā)射.? ?5.takeFirst:提取滿足條件的第一項(xiàng)數(shù)據(jù)。


??6.first/firstOrDefault:只發(fā)射第一項(xiàng)(或者滿足某個(gè)條件的第一項(xiàng))數(shù)據(jù),可以指定默認(rèn)值。? ?


? ?7.skip:跳過指定數(shù)量或指定時(shí)間內(nèi)的元素。??


? ?8.skipLast:跳過前面指定數(shù)量或指定時(shí)間內(nèi)的元素。指定時(shí)間時(shí)會延遲源 Observable 發(fā)射的任何數(shù)據(jù)。
? ?9.elementAt/elementAtOrDefault:只發(fā)射指定索引的元素/只發(fā)射指定索引的元素,若該索引對應(yīng)的元素不存在,則發(fā)射默認(rèn)值。

? 10.ignoreElements:不發(fā)射任何數(shù)據(jù),直接發(fā)出 onCompleted() 通知。?


? 11.distinct:過濾重復(fù)數(shù)據(jù).。


?12.distinctUntilChanged:過濾掉連續(xù)重復(fù)的數(shù)據(jù)。

3.條件/布爾操作

? ?1.all: 判斷所有的數(shù)據(jù)項(xiàng)是否滿足某個(gè)條件。



? ?2.exists:判斷是否存在數(shù)據(jù)項(xiàng)滿足某個(gè)條件。

? ?3.contains:判斷在發(fā)射的所有數(shù)據(jù)項(xiàng)中是否包含指定的數(shù)據(jù)。


? ?4.sequenceEqual:判斷兩個(gè)Observable發(fā)射的數(shù)據(jù)是否相同。


? ?5.isEmpty:判斷Observable發(fā)射完畢時(shí),有沒有發(fā)射數(shù)據(jù)。


? ?6.takeWhile當(dāng)發(fā)射的數(shù)據(jù)滿足某個(gè)條件時(shí)(不包含該數(shù)據(jù)),Observable終止發(fā)送數(shù)據(jù):

? ?7.skipUntil: 丟棄Observable發(fā)射的數(shù)據(jù),直到第二個(gè)Observable發(fā)送數(shù)據(jù)。? ? ? ? ? ? ??

? ?8.skipWhile: 丟棄Observable發(fā)射的數(shù)據(jù),直到一個(gè)指定的條件不成立? ? ? ? ? ? ? ? ? ? ? ? ?

? ? 9.takeUntil: 當(dāng)發(fā)射的數(shù)據(jù)滿足某個(gè)條件后(包含該數(shù)據(jù)),或者第二個(gè)Observable發(fā)送完畢,終止第一個(gè)Observable發(fā)送數(shù)據(jù)。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ?10.defaultIfEmpty: 如果原始Observable正常終止后仍然沒有發(fā)射任何數(shù)據(jù),就發(fā)射一個(gè)默認(rèn)值。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ?11.switchIfEmpty: 如果原始Observable正常終止后仍然沒有發(fā)射任何數(shù)據(jù),就使用備用的Observable。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ?12.amb: 給定多個(gè)Observable,只讓第一個(gè)發(fā)射數(shù)據(jù)的Observable發(fā)射全部數(shù)據(jù),其他Observable將會被忽略。

4.隊(duì)列操作

? ?1.toList: 收集原始Observable發(fā)射的所有數(shù)據(jù)到一個(gè)列表,然后返回這個(gè)列表。? ? ? ? ??

? ?2.toSortedList: 收集原始Observable發(fā)射的所有數(shù)據(jù)到一個(gè)有序列表,然后返回這個(gè)列表。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???3.toMap: 將序列數(shù)據(jù)轉(zhuǎn)換為一個(gè)Map。我們可以根據(jù)數(shù)據(jù)項(xiàng)生成key和生成value。 ? ? ?

? ?4.toMultiMap: 類似于toMap,不同的地方在于map的value是一個(gè)集合。

5.變換

? ?1.map: 對Observable發(fā)射的每一項(xiàng)數(shù)據(jù)都應(yīng)用一個(gè)函數(shù)來變換。? ? ? ? ? ? ? ? ? ? ??

? ? 2.flatMap/flatMapIterable:將Observable發(fā)射的數(shù)據(jù)變換為Observables集合,再轉(zhuǎn)換再轉(zhuǎn)換成新的Observable
??

?3.concatMap:類似于flatMap,由于內(nèi)部使用concat合并,所以是按照順序連接發(fā)射??

? ?4.switchMap :和flatMap很像,將Observable發(fā)射的數(shù)據(jù)變換為Observables集合,當(dāng)原始Observable發(fā)射一個(gè)新的數(shù)據(jù)(Observable)時(shí),它將取消訂閱前一個(gè)Observable 5.scan:與reduce很像,對Observable發(fā)射的每一項(xiàng)數(shù)據(jù)應(yīng)用一個(gè)函數(shù),然后按順序依次發(fā)射每一個(gè)值。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? 6.groupBy: 將Observable分拆為Observable集合,將原始Observable發(fā)射的數(shù)據(jù)按Key分組,每一個(gè)Observable發(fā)射一組不同的數(shù)據(jù)。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? 7.buffer: 它定時(shí)從Observable收集數(shù)據(jù)到一個(gè)集合,然后把這些數(shù)據(jù)集合打包發(fā)射


?8.window:它定時(shí)把Observable收集拆分,然后單獨(dú)發(fā)射。

6.重試

? 1.retry: 當(dāng)Observable在遇到錯(cuò)誤時(shí)不直接發(fā)出onError()通知,而是重新訂閱該Observable進(jìn)行重試。


? 2.retryWhen:當(dāng)Observable在遇到錯(cuò)誤,將錯(cuò)誤傳遞給另一個(gè)Observable來決定是否要重新訂閱這個(gè)Observable。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本篇文章介主要紹RxJava中操作符是以函數(shù)作為基本單位,與響應(yīng)式編程作為結(jié)合使用的,對什么是操作、操作符都有哪些...
    嘎啦果安卓獸閱讀 2,973評論 0 10
  • 作者: maplejaw本篇只解析標(biāo)準(zhǔn)包中的操作符。對于擴(kuò)展包,由于使用率較低,如有需求,請讀者自行查閱文檔。 創(chuàng)...
    maplejaw_閱讀 46,188評論 8 93
  • 注:只包含標(biāo)準(zhǔn)包中的操作符,用于個(gè)人學(xué)習(xí)及備忘參考博客:http://blog.csdn.net/maplejaw...
    小白要超神閱讀 2,366評論 2 8
  • 創(chuàng)建操作 用于創(chuàng)建Observable的操作符Create通過調(diào)用觀察者的方法從頭創(chuàng)建一個(gè)ObservableEm...
    rkua閱讀 1,952評論 0 1
  • 參考:給 Android 開發(fā)者的 RxJava 詳解-扔物線深入淺出RxJava 基礎(chǔ) "a library f...
    Vincen1024閱讀 573評論 0 1

友情鏈接更多精彩內(nèi)容