RxJava操作符匯總

  • 這個(gè)頁面展示了創(chuàng)建Observable的各種方法猾封。

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

  • 這個(gè)頁面展示了可用于對(duì)Observable發(fā)射的數(shù)據(jù)執(zhí)行變換操作的各種操作符覆糟。

**map(?)
**
— 對(duì)序列的每一項(xiàng)都應(yīng)用一個(gè)函數(shù)來變換Observable發(fā)射的數(shù)據(jù)序列
flatMap(?), concatMap(?), and flatMapIterable(?) — 將Observable發(fā)射的數(shù)據(jù)集合變換為Observables集合,然后將這些Observable發(fā)射的數(shù)據(jù)平坦化的放進(jìn)一個(gè)單獨(dú)的Observable
**switchMap(?)
**
— 將Observable發(fā)射的數(shù)據(jù)集合變換為Observables集合勾徽,然后只發(fā)射這些Observables最近發(fā)射的數(shù)據(jù)
**scan(?)
**
— 對(duì)Observable發(fā)射的每一項(xiàng)數(shù)據(jù)應(yīng)用一個(gè)函數(shù)绒障,然后按順序依次發(fā)射每一個(gè)值
**groupBy(?)
**
— 將Observable分拆為Observable集合,將原始Observable發(fā)射的數(shù)據(jù)按Key分組酝碳,每一個(gè)Observable發(fā)射一組不同的數(shù)據(jù)
**buffer(?)
**
— 它定期從Observable收集數(shù)據(jù)到一個(gè)集合矾踱,然后把這些數(shù)據(jù)集合打包發(fā)射,而不是一次發(fā)射一個(gè)
**window(?)
**
— 定期將來自O(shè)bservable的數(shù)據(jù)分拆成一些Observable窗口疏哗,然后發(fā)射這些窗口呛讲,而不是每次發(fā)射一項(xiàng)
**cast(?)
**
— 在發(fā)射之前強(qiáng)制將Observable發(fā)射的所有數(shù)據(jù)轉(zhuǎn)換為指定類型

  • 這個(gè)頁面展示的操作符可用于過濾和選擇Observable發(fā)射的數(shù)據(jù)序列。

**filter(?)
**
— 過濾數(shù)據(jù)
**takeLast(?)
**
— 只發(fā)射最后的N項(xiàng)數(shù)據(jù)
**last(?)
**
— 只發(fā)射最后的一項(xiàng)數(shù)據(jù)
**lastOrDefault(?)
**
— 只發(fā)射最后的一項(xiàng)數(shù)據(jù)返奉,如果Observable為空就發(fā)射默認(rèn)值
**takeLastBuffer(?)
**
— 將最后的N項(xiàng)數(shù)據(jù)當(dāng)做單個(gè)數(shù)據(jù)發(fā)射
**skip(?)
**
— 跳過開始的N項(xiàng)數(shù)據(jù)
**skipLast(?)
**
— 跳過最后的N項(xiàng)數(shù)據(jù)
**take(?)
**
— 只發(fā)射開始的N項(xiàng)數(shù)據(jù)
**first(?)
and takeFirst(?)
**
— 只發(fā)射第一項(xiàng)數(shù)據(jù)贝搁,或者滿足某種條件的第一項(xiàng)數(shù)據(jù)
**firstOrDefault(?)
**
— 只發(fā)射第一項(xiàng)數(shù)據(jù),如果Observable為空就發(fā)射默認(rèn)值
**elementAt(?)
**
— 發(fā)射第N項(xiàng)數(shù)據(jù)
**elementAtOrDefault(?)
**
— 發(fā)射第N項(xiàng)數(shù)據(jù)衡瓶,如果Observable數(shù)據(jù)少于N項(xiàng)就發(fā)射默認(rèn)值
**sample(?)
or throttleLast(?)
**
— 定期發(fā)射Observable最近的數(shù)據(jù)
**throttleFirst(?)
**
— 定期發(fā)射Observable發(fā)射的第一項(xiàng)數(shù)據(jù)
**throttleWithTimeout(?)
or debounce(?)
**
— 只有當(dāng)Observable在指定的時(shí)間后還沒有發(fā)射數(shù)據(jù)時(shí)徘公,才發(fā)射一個(gè)數(shù)據(jù)
**timeout(?)
**
— 如果在一個(gè)指定的時(shí)間段后還沒發(fā)射數(shù)據(jù)牲证,就發(fā)射一個(gè)異常
**distinct(?)
**
— 過濾掉重復(fù)數(shù)據(jù)
**distinctUntilChanged(?)
**
— 過濾掉連續(xù)重復(fù)的數(shù)據(jù)
**ofType(?)
**
— 只發(fā)射指定類型的數(shù)據(jù)
**ignoreElements(?)
**
— 丟棄所有的正常數(shù)據(jù)哮针,只發(fā)射錯(cuò)誤或完成通知

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

**startWith(?)
**
— 在數(shù)據(jù)序列的開頭增加一項(xiàng)數(shù)據(jù)
**merge(?)
**
— 將多個(gè)Observable合并為一個(gè)
**mergeDelayError(?)
**
— 合并多個(gè)Observables坦袍,讓沒有錯(cuò)誤的Observable都完成后再發(fā)射錯(cuò)誤通知
**zip(?)
**
— 使用一個(gè)函數(shù)組合多個(gè)Observable發(fā)射的數(shù)據(jù)集合十厢,然后再發(fā)射這個(gè)結(jié)果
**and(?)
, then(?)
, and when(?)
**
— (rxjava-joins
) 通過模式和計(jì)劃組合多個(gè)Observables發(fā)射的數(shù)據(jù)集合
**combineLatest(?)
**
— 當(dāng)兩個(gè)Observables中的任何一個(gè)發(fā)射了一個(gè)數(shù)據(jù)時(shí),通過一個(gè)指定的函數(shù)組合每個(gè)Observable發(fā)射的最新數(shù)據(jù)(一共兩個(gè)數(shù)據(jù))捂齐,然后發(fā)射這個(gè)函數(shù)的結(jié)果
**join(?)
and groupJoin(?)
**
— 無論何時(shí)蛮放,如果一個(gè)Observable發(fā)射了一個(gè)數(shù)據(jù)項(xiàng),只要在另一個(gè)Observable發(fā)射的數(shù)據(jù)項(xiàng)定義的時(shí)間窗口內(nèi)奠宜,就將兩個(gè)Observable發(fā)射的數(shù)據(jù)合并發(fā)射
**switchOnNext(?)
**
— 將一個(gè)發(fā)射Observables的Observable轉(zhuǎn)換成另一個(gè)Observable包颁,后者發(fā)射這些Observables最近發(fā)射的數(shù)據(jù)
(rxjava-joins) — 表示這個(gè)操作符當(dāng)前是可選的rxjava-joins包的一部分,還沒有包含在標(biāo)準(zhǔn)的RxJava操作符集合里

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

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

**materialize(?)
**
— 將Observable轉(zhuǎn)換成一個(gè)通知列表convert an Observable into a list of Notifications
**dematerialize(?)
**
— 將上面的結(jié)果逆轉(zhuǎn)回一個(gè)Observable
**timestamp(?)
**
— 給Observable發(fā)射的每個(gè)數(shù)據(jù)項(xiàng)添加一個(gè)時(shí)間戳
**serialize(?)
**
— 強(qiáng)制Observable按次序發(fā)射數(shù)據(jù)并且要求功能是完好的
**cache(?)
**
— 記住Observable發(fā)射的數(shù)據(jù)序列并發(fā)射相同的數(shù)據(jù)序列給后續(xù)的訂閱者
**observeOn(?)
**
— 指定觀察者觀察Observable的調(diào)度器
**subscribeOn(?)
**
— 指定Observable執(zhí)行任務(wù)的調(diào)度器
**doOnEach(?)
**
— 注冊(cè)一個(gè)動(dòng)作,對(duì)Observable發(fā)射的每個(gè)數(shù)據(jù)項(xiàng)使用
**doOnCompleted(?)
**
— 注冊(cè)一個(gè)動(dòng)作,對(duì)正常完成的Observable使用
**doOnError(?)
**
— 注冊(cè)一個(gè)動(dòng)作贵少,對(duì)發(fā)生錯(cuò)誤的Observable使用
**doOnTerminate(?)
**
— 注冊(cè)一個(gè)動(dòng)作呵俏,對(duì)完成的Observable使用,無論是否發(fā)生錯(cuò)誤
**doOnSubscribe(?)
**
— 注冊(cè)一個(gè)動(dòng)作滔灶,在觀察者訂閱時(shí)使用
**doOnUnsubscribe(?)
**
— 注冊(cè)一個(gè)動(dòng)作普碎,在觀察者取消訂閱時(shí)使用
**finallyDo(?)
**
— 注冊(cè)一個(gè)動(dòng)作,在Observable完成時(shí)使用
**delay(?)
**
— 延時(shí)發(fā)射Observable的結(jié)果
**delaySubscription(?)
**
— 延時(shí)處理訂閱請(qǐng)求
**timeInterval(?)
**
— 定期發(fā)射數(shù)據(jù)
**using(?)
**
— 創(chuàng)建一個(gè)只在Observable生命周期存在的資源
**single(?)
**
— 強(qiáng)制返回單個(gè)數(shù)據(jù)宽气,否則拋出異常
**singleOrDefault(?)
**
— 如果Observable完成時(shí)返回了單個(gè)數(shù)據(jù)随常,就返回它,否則返回默認(rèn)數(shù)據(jù)
**toFuture(?)
**, **toIterable(?)
**, **toList(?)
**
— 將Observable轉(zhuǎn)換為其它對(duì)象或數(shù)據(jù)結(jié)構(gòu)

  • 這個(gè)頁面的操作符可用于根據(jù)條件發(fā)射或變換Observables萄涯,或者對(duì)它們做布爾運(yùn)算:

  • 條件操作符

**amb(?)
**
— 給定多個(gè)Observable绪氛,只讓第一個(gè)發(fā)射數(shù)據(jù)的Observable發(fā)射全部數(shù)據(jù)
**defaultIfEmpty(?)
**
— 發(fā)射來自原始Observable的數(shù)據(jù),如果原始Observable沒有發(fā)射數(shù)據(jù)涝影,就發(fā)射一個(gè)默認(rèn)數(shù)據(jù)
(rxjava-computation-expressions
) **doWhile(?)
**
— 發(fā)射原始Observable的數(shù)據(jù)序列枣察,然后重復(fù)發(fā)射這個(gè)序列直到不滿足這個(gè)條件為止
(rxjava-computation-expressions
) **ifThen(?)
**
— 只有當(dāng)某個(gè)條件為真時(shí)才發(fā)射原始Observable的數(shù)據(jù)序列,否則發(fā)射一個(gè)空的或默認(rèn)的序列
**skipUntil(?)
**
— 丟棄原始Observable發(fā)射的數(shù)據(jù)燃逻,直到第二個(gè)Observable發(fā)射了一個(gè)數(shù)據(jù)序目,然后發(fā)射原始Observable的剩余數(shù)據(jù)
**skipWhile(?)
**
— 丟棄原始Observable發(fā)射的數(shù)據(jù),直到一個(gè)特定的條件為假伯襟,然后發(fā)射原始Observable剩余的數(shù)據(jù)
(rxjava-computation-expressions
) **switchCase(?)
**
— 基于一個(gè)計(jì)算結(jié)果猿涨,發(fā)射一個(gè)指定Observable的數(shù)據(jù)序列
**takeUntil(?)
**
— 發(fā)射來自原始Observable的數(shù)據(jù),直到第二個(gè)Observable發(fā)射了一個(gè)數(shù)據(jù)或一個(gè)通知
**takeWhile(?)
and takeWhileWithIndex(?)
**
— 發(fā)射原始Observable的數(shù)據(jù)姆怪,直到一個(gè)特定的條件為真叛赚,然后跳過剩余的數(shù)據(jù)
(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如果滿足一個(gè)條件,發(fā)射原始Observable的數(shù)據(jù)稽揭,然后重復(fù)發(fā)射直到不滿足這個(gè)條件為止
(rxjava-computation-expressions) — 表示這個(gè)操作符當(dāng)前是可選包 rxjava-computation-expressions
的一部分俺附,還沒有包含在標(biāo)準(zhǔn)RxJava的操作符集合里

  • 布爾操作符

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市溪掀,隨后出現(xiàn)的幾起案子事镣,更是在濱河造成了極大的恐慌,老刑警劉巖揪胃,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件璃哟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡喊递,警方通過查閱死者的電腦和手機(jī)随闪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來册舞,“玉大人蕴掏,你說我怎么就攤上這事。” “怎么了盛杰?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵挽荡,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我即供,道長(zhǎng)定拟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任逗嫡,我火速辦了婚禮青自,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘驱证。我一直安慰自己延窜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布抹锄。 她就那樣靜靜地躺著逆瑞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪伙单。 梳的紋絲不亂的頭發(fā)上获高,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音吻育,去河邊找鬼念秧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛布疼,可吹牛的內(nèi)容都是我干的摊趾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼缎除,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼严就!你這毒婦竟也來了总寻?” 一聲冷哼從身側(cè)響起器罐,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渐行,沒想到半個(gè)月后轰坊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡祟印,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年肴沫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕴忆。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颤芬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情站蝠,我是刑警寧澤汰具,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站菱魔,受9級(jí)特大地震影響留荔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜澜倦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一聚蝶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧藻治,春花似錦碘勉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吸占,卻和暖如春晴叨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背矾屯。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工兼蕊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人件蚕。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓孙技,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親排作。 傳聞我的和親對(duì)象是個(gè)殘疾皇子牵啦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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

  • 本篇文章介主要紹RxJava中操作符是以函數(shù)作為基本單位,與響應(yīng)式編程作為結(jié)合使用的妄痪,對(duì)什么是操作哈雏、操作符都有哪些...
    嘎啦果安卓獸閱讀 2,862評(píng)論 0 10
  • 創(chuàng)建操作 用于創(chuàng)建Observable的操作符Create通過調(diào)用觀察者的方法從頭創(chuàng)建一個(gè)ObservableEm...
    rkua閱讀 1,829評(píng)論 0 1
  • 作者: maplejaw本篇只解析標(biāo)準(zhǔn)包中的操作符。對(duì)于擴(kuò)展包衫生,由于使用率較低裳瘪,如有需求,請(qǐng)讀者自行查閱文檔罪针。 創(chuàng)...
    maplejaw_閱讀 45,672評(píng)論 8 93
  • RxJava正在Android開發(fā)者中變的越來越流行彭羹。唯一的問題就是上手不容易,尤其是大部分人之前都是使用命令式編...
    劉啟敏閱讀 1,871評(píng)論 1 7
  • 注:只包含標(biāo)準(zhǔn)包中的操作符泪酱,用于個(gè)人學(xué)習(xí)及備忘參考博客:http://blog.csdn.net/maplejaw...
    小白要超神閱讀 2,195評(píng)論 2 8