RxJava學(xué)習(xí)筆記3(操作符-過(guò)濾)

  1. Debounce/throtleWithTimeout

    • debounce(long,TimeUnit)或
      throttleWithTimeout(long,TimeUnit) :在一個(gè)數(shù)據(jù)發(fā)射后的一個(gè)時(shí)間段內(nèi),若沒(méi)有新數(shù)據(jù)發(fā)射時(shí),發(fā)射該數(shù)據(jù);若有,則在新數(shù)據(jù)到來(lái)時(shí)重新計(jì)時(shí),重復(fù)之前所敘邏輯。


    • debounce(long,TimeUnit,Scheduler)
      throttleWithTimeout(long,TimeUnit,Scheduler)
    • debounce(Func1)

      注意:源Observable觸發(fā)onComplete()并不會(huì)使數(shù)據(jù)停止發(fā)射
  2. distinct

    • distinct()
      distinct(Func1):去除重復(fù)數(shù)據(jù)

      注意:distinct會(huì)緩存之前發(fā)射的數(shù)據(jù),當(dāng)源Observable數(shù)據(jù)過(guò)大時(shí),需要注意內(nèi)存問(wèn)題
    • distinctUntilChanged()
      distinctUntilChanged(Func1):去除相鄰重復(fù)的數(shù)據(jù)
  3. elementAt

    • elementAt(int):獲取第n個(gè)數(shù)據(jù),索引從0開(kāi)始

      注意:若源Observaer發(fā)射的數(shù)量為n,索引i<0 或 i>n會(huì)導(dǎo)致IndexOutOfBoundsException.
    • elementAtOrDefault(int,T):獲取第n個(gè)數(shù)據(jù),若不存在則發(fā)射默認(rèn)值T
  4. filter:發(fā)射滿足條件的數(shù)據(jù)


  5. first

    • first():發(fā)射第一個(gè)數(shù)據(jù)
      first(Func1)
      firstOrDefault(T)

      注意:first和firstOrDefault是阻塞式的,它會(huì)等待源Observable發(fā)射完成后才發(fā)射數(shù)據(jù)。
    • takeFirst(Func1): 和first類似
      注意:若源Observable未發(fā)射任何數(shù)據(jù),first會(huì)拋出NoSuchElementException,takeFirst會(huì)返回一個(gè)空的Observable
    • single():和first類似

      注意:如果源Observable發(fā)射的不是唯一的數(shù)據(jù),則會(huì)拋出NoSuchElementException
    • single(Func1)


    • singleOrDefault(T)


    • singleOrDefault(Func1,T)


  6. ignoreElements

    • ignoreElements():忽略數(shù)據(jù)的發(fā)送,只會(huì)發(fā)送通知(onComplete(),onError())


  7. last

    • last():發(fā)射最后一個(gè)數(shù)據(jù),用法同first
      last(Func1)
      lastOrDefault(T)
  8. sample/throttleLast

    • sample(long,TimeUnit) / throttleLast(long,TimeUnit)
      sample(long,TimeUnit,Scheduler) / throttleLast(long,TimeUnit,Scheduler)

      注意:最后的數(shù)據(jù)在指定的時(shí)間段內(nèi)提前結(jié)束,則會(huì)丟失
    • sample(Observable)


    • throttleFirst(long,TimeUnit)
      throttleFirst(long,TimeUnit,Scheduler)


  9. skip

    • skip(int):過(guò)濾開(kāi)始的n個(gè)數(shù)據(jù)


    • skip(long,TimeUnit)
      skip(long,TimeUnit,Scheduler)


  10. skipLast

    • skipLast(int):過(guò)濾最后的n個(gè)數(shù)據(jù)


    • skipLast(long,TimeUnit)
      skipLast(long,TimeUnit,Scheduler)


  11. take

    • take(int)/limit(int):發(fā)射前面n個(gè)數(shù)據(jù)

      注意:假設(shè)Oberserable在完成之前發(fā)射的數(shù)量為m,若m<n,不會(huì)拋異常或調(diào)用onError(),發(fā)射m個(gè)數(shù)據(jù)
    • take(long,TimeUnit):發(fā)射指定時(shí)間段的數(shù)據(jù)
      take(long,TimeUnit,Scheduler)


  12. takeLast

- takeLast(n):發(fā)射最后n個(gè)數(shù)據(jù)


注意:會(huì)延遲發(fā)射直到源Observable 發(fā)射完成
- takeLast(long,TimeUnit):發(fā)射指定時(shí)間段的數(shù)據(jù)
takeLast(long,TimeUnit,Scheduler)

- takeLastBuffer(int):和takeLast類似,只是會(huì)把數(shù)據(jù)作為一個(gè)list一起發(fā)射

- takeLastBuffer(long,TimeUnit)
takeLastBuffer(long,TimeUnit,Scheduler)
takeLastBuffer(int,long,TimeUnit)
takeLastBuffer(int,long,TimeUnit,Scheduler)

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

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

  • 本文基于 RxJava1.x 版本,閱讀本文前請(qǐng)先了解 RxJava[https://github.com/Rea...
    StoneHui閱讀 3,114評(píng)論 2 18
  • 注:只包含標(biāo)準(zhǔn)包中的操作符,用于個(gè)人學(xué)習(xí)及備忘參考博客:http://blog.csdn.net/maplejaw...
    小白要超神閱讀 2,366評(píng)論 2 8
  • 作者: maplejaw本篇只解析標(biāo)準(zhǔn)包中的操作符。對(duì)于擴(kuò)展包,由于使用率較低,如有需求,請(qǐng)讀者自行查閱文檔。 創(chuàng)...
    maplejaw_閱讀 46,201評(píng)論 8 93
  • RxJava正在Android開(kāi)發(fā)者中變的越來(lái)越流行。唯一的問(wèn)題就是上手不容易,尤其是大部分人之前都是使用命令式編...
    劉啟敏閱讀 2,013評(píng)論 1 7
  • 圖片來(lái)自網(wǎng)絡(luò) 如果你知識(shí)淵博,才高八斗,那么請(qǐng)把知識(shí)用到你的事業(yè)或?qū)W習(xí)上去。如果你人微言輕,資望不足,那么請(qǐng)選擇與...
    豫視西影閱讀 813評(píng)論 1 7

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