
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。