startWith:
public final Observable<T> startWith(Observable<T> values)
public final Observable<T> startWith(java.lang.Iterable<T> values)
public final Observable<T> startWith(T t1)
......
public final Observable<T> startWith(T t1, T t2, T t3, T t4, T t5, T t6, T t7, T t8, T t9)
接受一個(gè)Observable、Iterable實(shí)例或者1到9個(gè)值作為參數(shù)。在釋放原始的Observable釋放的序列前先釋放傳入的Observable實(shí)例釋放的序列、Iterable實(shí)例的元素或者按傳入順序釋放傳入的1到9個(gè)值滨达。
merge,mergeWith:
public static <T> Observable<T> merge(java.lang.Iterable<? extends Observable<? extends T>> sequences)
public static <T> Observable<T> merge(java.lang.Iterable<? extends Observable<? extends T>> sequences, int maxConcurrent)
public static <T> Observable<T> merge(Observable<? extends T>[] sequences)
public static <T> Observable<T> merge(Observable<? extends T>[] sequences, int maxConcurrent)
public static <T> Observable<T> merge(Observable<? extends T> t1, Observable<? extends T> t2)
public static <T> Observable<T> merge(Observable<? extends Observable<? extends T>> source)
public static <T> Observable<T> merge(Observable<? extends Observable<? extends T>> source, int maxConcurrent)
......
public static <T> Observable<T> merge(Observable<? extends T> t1,
Observable<? extends T> t2,
Observable<? extends T> t3,
Observable<? extends T> t4,
Observable<? extends T> t5,
Observable<? extends T> t6,
Observable<? extends T> t7,
Observable<? extends T> t8,
Observable<? extends T> t9)
簡(jiǎn)單來說就是把一大堆的Observable釋放的序列合并到一個(gè)Observerble來釋放。所以可以看到帚屉,ta接受的參數(shù)可以是2到9個(gè)的Observable實(shí)例、泛型為Observable的Iterable實(shí)例漾峡、類型為Observable的數(shù)組或者釋放的序列類型為Observable的Observable實(shí)例攻旦。注意,ta還可以接受一個(gè)int類型的參數(shù)生逸,用來限制每次訂閱合并的Observable的最大個(gè)數(shù)牢屋,當(dāng)要合并的Observable數(shù)大于這個(gè)值,多出來的Observable暫時(shí)不會(huì)合并槽袄,直到已經(jīng)合并的Observable中有終止了的(發(fā)出onComplted通知)烙无,再繼續(xù)合并未合并的Observable。注意遍尺,當(dāng)這些要合并的Observable中有發(fā)onError通知終止的截酷,那么最終合并得來的那個(gè)Observable也將立即發(fā)出onError通知終止。還有一個(gè)小點(diǎn)就是Observable實(shí)例有個(gè)方法mergeWith用來將這個(gè)Observable實(shí)例和其taObservable實(shí)例合并乾戏。
mergeDelayError:
public static <T> Observable<T> mergeDelayError(Observable<? extends Observable<? extends T>> source)
public static <T> Observable<T> mergeDelayError(Observable<? extends T> t1, Observable<? extends T> t2)
......
public static <T> Observable<T> mergeDelayError(Observable<? extends T> t1,
Observable<? extends T> t2,
Observable<? extends T> t3,
Observable<? extends T> t4,
Observable<? extends T> t5,
Observable<? extends T> t6,
Observable<? extends T> t7,
Observable<? extends T> t8,
Observable<? extends T> t9)
基本和上面merge一樣合搅,不過對(duì)于錯(cuò)誤處理上稍強(qiáng)一些多搀。當(dāng)被合并的一堆Observable中有發(fā)出onError終止的,最終那個(gè)合并得來的Observable不會(huì)立即終止灾部,而是繼續(xù)釋放其ta沒有終止的被合并的Observable發(fā)出的序列康铭,最后才發(fā)出onError終止。因?yàn)榭赡懿恢挂粋€(gè)被合并的Observable會(huì)發(fā)出onError赌髓,因此會(huì)有可能會(huì)有多種錯(cuò)誤類型从藤,最終在訂閱的Observer的onError方法中會(huì)收到CompositeException類型的異常。注意锁蠕,最終合并得來的Observable最多只會(huì)調(diào)用一次onError方法夷野。
zip,zipWith:
public static <R> Observable<R> zip(java.lang.Iterable<? extends Observable<?>> ws, FuncN<? extends R> zipFunction)
public static <R> Observable<R> zip(Observable<? extends Observable<?>> ws, FuncN<? extends R> zipFunction)
public static <T1,T2,R> Observable<R> zip(Observable<? extends T1> o1, Observable<? extends T2> o2, Func2<? super T1,? super T2,? extends R> zipFunction)
......
public static <T1,T2,T3,T4,T5,T6,T7,T8,T9,R> Observable<R> zip(Observable<? extends T1> o1,
Observable<? extends T2> o2,
Observable<? extends T3> o3,
Observable<? extends T4> o4,
Observable<? extends T5> o5,
Observable<? extends T6> o6,
Observable<? extends T7> o7,
Observable<? extends T8> o8,
Observable<? extends T9> o9,
Func9<? super T1,? super T2,? super T3,? super T4,? super T5,? super T6,? super T7,? super T8,? super T9,? extends R> zipFunction)
#Observable實(shí)例的方法(zipWith):
public final <T2,R> Observable<R> zipWith(Observable<? extends T2> other, Func2<? super T,? super T2,? extends R> zipFunction)
public final <T2,R> Observable<R> zipWith(java.lang.Iterable<? extends T2> other, Func2<? super T,? super T2,? extends R> zipFunction)
接受兩個(gè)參數(shù)荣倾,第一個(gè)提供一堆Observable悯搔,第二個(gè)是一個(gè)FuncN實(shí)現(xiàn)。與上面的操作符不同舌仍,這個(gè)操作符通過第二個(gè)參數(shù)FuncN實(shí)現(xiàn)來合并一堆Observable發(fā)出的序列的每個(gè)item妒貌。并且這樣的合并有著嚴(yán)格的次序,具體說來就是铸豁,最終合并得來的Observable發(fā)出序列的第一個(gè)item是每個(gè)要合并的Observable發(fā)出序列的第一個(gè)item傳入FuncN實(shí)現(xiàn)得到的結(jié)果灌曙,然后依次類推。所以最終合并得來的Observable能發(fā)出的item個(gè)數(shù)和那一堆被合并的Observable中能發(fā)出item個(gè)數(shù)最少的items數(shù)量相等节芥。zipWith不過是Observable實(shí)例的方法在刺,與zip同理,注意一下zipWith(Iterable,Func2)的第一個(gè)參數(shù)头镊,不是Observable而是Iterable蚣驼,但是不用說也能心領(lǐng)神會(huì)我想說什么了吧。
combineLatest:
public static <T,R> Observable<R> combineLatest(java.util.List<? extends Observable<? extends T>> sources, FuncN<? extends R> combineFunction)
public static <T1,T2,R> Observable<R> combineLatest(Observable<? extends T1> o1, Observable<? extends T2> o2, Func2<? super T1,? super T2,? extends R> combineFunction)
......
public static <T1,T2,T3,T4,T5,T6,T7,T8,T9,R> Observable<R> combineLatest(Observable<? extends T1> o1,
Observable<? extends T2> o2,
Observable<? extends T3> o3,
Observable<? extends T4> o4,
Observable<? extends T5> o5,
Observable<? extends T6> o6,
Observable<? extends T7> o7,
Observable<? extends T8> o8,
Observable<? extends T9> o9,
Func9<? super T1,? super T2,? super T3,? super T4,? super T5,? super T6,? super T7,? super T8,? super T9,? extends R> combineFunction)
和zip操作符很像相艇,但和zip不同的是隙姿,zip操作符是按嚴(yán)格次序來合并一堆源Observable釋放序列的每個(gè)item而作為創(chuàng)建的新Observable釋放序列的item的,也就是說新的Observale釋放序列的第一個(gè)item是所有源Observable釋放序列的第一個(gè)item通過zip的第二個(gè)參數(shù)FuncN實(shí)現(xiàn)合并而成的厂捞,之后的第二、第三等等以此類推队丝。combineLatest通過FuncN實(shí)現(xiàn)來合并每個(gè)源Observable最近釋放的item來構(gòu)成新建的Observable釋放序列的item的靡馁。
join、groupJoin:
public final <TRight,TLeftDuration,TRightDuration,R> Observable<R> join(Observable<TRight> right, Func1<T,Observable<TLeftDuration>> leftDurationSelector, Func1<TRight,Observable<TRightDuration>> rightDurationSelector, Func2<T,TRight,R> resultSelector)
public final <T2,D1,D2,R> Observable<R> groupJoin(Observable<T2> right, Func1<? super T,? extends Observable<D1>> leftDuration, Func1<? super T2,? extends Observable<D2>> rightDuration, Func2<? super T,? super Observable<T2>,? extends R> resultSelector)
注意這兩個(gè)家伙是Observable實(shí)例的方法机久。理解這兩個(gè)方法的參數(shù)很關(guān)鍵臭墨,前三個(gè)參數(shù)都是一樣的,第四個(gè)參數(shù)有些區(qū)別膘盖。第一個(gè)參數(shù)是要和源Observable合并的Observable胧弛;第二個(gè)參數(shù)是一個(gè)Func1實(shí)現(xiàn)接受一個(gè)參數(shù)就是源Observable釋放的item尤误,返回一個(gè)Observable管理一個(gè)時(shí)間窗口;第三個(gè)參數(shù)也是一個(gè)Func1實(shí)現(xiàn)接受一個(gè)參數(shù)就是要合并的Observable釋放的item结缚,同樣返回一個(gè)Observable管理著一個(gè)時(shí)間窗口损晤;如果上面兩個(gè)Observable管理的時(shí)間窗口有交集,那么第四個(gè)參數(shù)也就是一個(gè)Func2實(shí)現(xiàn)就會(huì)起來發(fā)揮合并的作用了红竭,F(xiàn)unc2實(shí)現(xiàn)接受兩個(gè)參數(shù)尤勋,對(duì)于join方法,前兩個(gè)參數(shù)是處在時(shí)間窗口交集中源Observable和要合并的Observable釋放的item茵宪,而對(duì)于groupJoin第一個(gè)參數(shù)是處在時(shí)間窗口交集中源Observable釋放的item最冰,第二個(gè)參數(shù)是處在時(shí)間窗口交集中由要合并的Observable釋放的item經(jīng)groupJoin的第三個(gè)參數(shù)Func1實(shí)現(xiàn)返回的管理時(shí)間窗口的Observable。這兩個(gè)方法新建的Observable釋放的item就是上面Func2實(shí)現(xiàn)的返回值了稀火。
switchOnNext:
public static <T> Observable<T> switchOnNext(Observable<? extends Observable<? extends T>> sequenceOfSequences)
這個(gè)簡(jiǎn)單一點(diǎn)暖哨。接受一個(gè)釋放Observable的Observable作為參數(shù)。switchOnNext觀察這個(gè)釋放Observable的Observable凰狞,當(dāng)有Observable釋放出來的時(shí)候switchOnNext新建的Observable就釋放這個(gè)Observable釋放的item篇裁,當(dāng)有新的Observable釋放出來的時(shí)候switchOnNext停止釋放上一個(gè)Observable釋放的item轉(zhuǎn)而釋放這個(gè)新釋放的Observable釋放的item,依次類推服球。(-:這句子茴恰,實(shí)在前無古人后無來者,太起伏了斩熊,太跌宕了-:)