RxJava操作符-組合


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í)在前無古人后無來者,太起伏了斩熊,太跌宕了-:)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末往枣,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子粉渠,更是在濱河造成了極大的恐慌分冈,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霸株,死亡現(xiàn)場(chǎng)離奇詭異雕沉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)去件,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門坡椒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人尤溜,你說我怎么就攤上這事倔叼。” “怎么了宫莱?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵丈攒,是天一觀的道長。 經(jīng)常有香客問我,道長巡验,這世上最難降的妖魔是什么际插? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮显设,結(jié)果婚禮上框弛,老公的妹妹穿的比我還像新娘。我一直安慰自己敷硅,他們只是感情好功咒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绞蹦,像睡著了一般力奋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幽七,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天景殷,我揣著相機(jī)與錄音,去河邊找鬼澡屡。 笑死猿挚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的驶鹉。 我是一名探鬼主播绩蜻,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼室埋!你這毒婦竟也來了办绝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤姚淆,失蹤者是張志新(化名)和其女友劉穎孕蝉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腌逢,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡降淮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搏讶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佳鳖。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖媒惕,靈堂內(nèi)的尸體忽然破棺而出系吩,到底是詐尸還是另有隱情,我是刑警寧澤吓笙,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站巾腕,受9級(jí)特大地震影響面睛,放射性物質(zhì)發(fā)生泄漏絮蒿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一叁鉴、第九天 我趴在偏房一處隱蔽的房頂上張望土涝。 院中可真熱鬧,春花似錦幌墓、人聲如沸但壮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜡饵。三九已至,卻和暖如春胳施,著一層夾襖步出監(jiān)牢的瞬間溯祸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工舞肆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留焦辅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓椿胯,卻偏偏與公主長得像筷登,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哩盲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 作者: maplejaw本篇只解析標(biāo)準(zhǔn)包中的操作符前方。對(duì)于擴(kuò)展包,由于使用率較低种冬,如有需求镣丑,請(qǐng)讀者自行查閱文檔。 創(chuàng)...
    maplejaw_閱讀 45,632評(píng)論 8 93
  • 本篇文章介主要紹RxJava中操作符是以函數(shù)作為基本單位娱两,與響應(yīng)式編程作為結(jié)合使用的莺匠,對(duì)什么是操作、操作符都有哪些...
    嘎啦果安卓獸閱讀 2,851評(píng)論 0 10
  • 注:只包含標(biāo)準(zhǔn)包中的操作符十兢,用于個(gè)人學(xué)習(xí)及備忘參考博客:http://blog.csdn.net/maplejaw...
    小白要超神閱讀 2,186評(píng)論 2 8
  • 創(chuàng)建操作 用于創(chuàng)建Observable的操作符Create通過調(diào)用觀察者的方法從頭創(chuàng)建一個(gè)ObservableEm...
    rkua閱讀 1,814評(píng)論 0 1
  • 響應(yīng)式編程簡(jiǎn)介 響應(yīng)式編程是一種基于異步數(shù)據(jù)流概念的編程模式趣竣。數(shù)據(jù)流就像一條河:它可以被觀測(cè),被過濾旱物,被操作遥缕,或者...
    說碼解字閱讀 3,058評(píng)論 0 5