filter

  • 该操作符就是用来过滤掉某些不符合要求的事件
  1. Observable.of(2, 30, 22, 5, 60, 3, 40, 9)
  2. .filter{ $0 > 10 }
  3. .subscribe(onNext: { print($0) })
  4. .disposed(by: bag)

distinctUntilChanged

  • 该操作符用于过滤掉连续重复的事件
  1. Observable.of(1,2,3,4,5,5,5,5,6,7,7,7,8,8,99,12)
  2. .distinctUntilChanged()
  3. .subscribe(onNext: { print($0) })
  4. .disposed(by: bag)

single

  • 限制只发送一次事件
  • 或者满足条件的第一个事件
  • 如果存在有多个事件或者没有事件都会发出一个error事件
  • 如果只有一个事件, 则不会发出error事件
  1. // 只有一个满足条件, 不会报错
  2. Observable.of(1,2,3,4)
  3. .single { (item) -> Bool in
  4. item == 2
  5. }.subscribe(onNext: {print($0)})
  6. .disposed(by: bag)
  7. // 两个满足条件,发送匹配的第一个条件, 并发送一个error
  8. Observable.of(5,6,7,6,8,5)
  9. .single { (item) -> Bool in
  10. item == 6
  11. }.subscribe(onNext: {print($0)})
  12. .disposed(by: bag)
  13. // 没有满足条件, 发送第一个, 并发送一个error
  14. Observable.of("A", "C", "D", "E")
  15. .single()
  16. .subscribe(onNext: {print($0)})
  17. .disposed(by: bag)

elementAt

  • 该方法实现只处理在指定位置的事件
  1. Observable.of("A", "B", "C", "D")
  2. .elementAt(3) // 根据索引来匹配
  3. .subscribe(onNext: {print($0)})
  4. .disposed(by: bag)

ignoreElements

  • 该操作符可以忽略掉所有的元素, 只发出error 或 completed 事件
  • 如果我们并不关心Observable的任何元素, 只想知道Observable在什么时候终止, 那就可以使用ignoreElements操作符
  1. Observable.of(1,2,3,4,5,6)
  2. .ignoreElements()
  3. .subscribe{ print($0) }
  4. .disposed(by: bag)

take

  • 该方法实现仅发送Observable序列中的前n个事件, 在满足数量之后会自动completed
  1. Observable.from([1,2,3,4,5,6,7])
  2. .take(3)
  3. .subscribe(onNext: {print($0)})
  4. .disposed(by: bag)

takeLast

  • 该方法实现仅发送Observable序列中的后n个事件
  1. Observable.of(1,2,3,4,5,6)
  2. .takeLast(2)
  3. .subscribe(onNext: { print($0) })
  4. .disposed(by: bag)

skip

  • 该方法用于跳过Observable序列发出的前n个事件
  1. Observable.of(1,2,3,4,5,6)
  2. .skip(4)
  3. .subscribe(onNext: { print($0) })
  4. .disposed(by: bag)

sample

  • sample 除了订阅源Observable外, 还可以监视另外一个Observable, 即notifier
  • 每当收到notifier事件, 就会从源序列取一个最新的事件并发送. 而如果两次notifier事件之间没有源序列的事件, 则不发送值
  1. let source = PublishSubject<Int>()
  2. let notifier = PublishSubject<String>()
  3. source.sample(notifier).subscribe(onNext: { print($0) }).disposed(by: bag)
  4. source.onNext(1)
  5. // notifier接收到事件后, source就会发送序列中最新的一个事件, 也就是上面的1
  6. notifier.onNext("A")
  7. source.onNext(2)
  8. // 让源序列接收消息 源序列接收到2
  9. notifier.onNext("B")
  10. // 与上次notifier.onNext相比, source并没有发生新的事件, 所以这里不触发source的事件
  11. notifier.onNext("C")
  12. source.onNext(3)
  13. source.onNext(4)
  14. // 让源序列接收消息 源序列接收到最新的4
  15. notifier.onNext("D")
  16. source.onNext(5)
  17. // 触发完成事件, 也会让源序列接收消息
  18. notifier.onCompleted()

debounce

  • debounce操作符可以用来过滤掉高频产生的元素, 他只会发出这种元素: 该元素产生后, 一段时间内没有新元素产生
  • 换句话说就是, 队列中的元素如果和下一个元素的间隔小于了指定的时间间隔, 那么这个元素将被过滤掉
  • debounce 常用在用户输入的时候, 不需要每个字母敲进去都会发送一个事件, 而是稍等一下取最后一个事件
  1. // 定义好每个事件里的值以及发送的时间
  2. let times = [
  3. ["value": 1, "time": 0.7],
  4. ["value": 2, "time": 1.4],
  5. ["value": 3, "time": 1.7],
  6. ["value": 4, "time": 1.7],
  7. ["value": 5, "time": 2.5],
  8. ["value": 6, "time": 2.9],
  9. ["value": 7, "time": 0.1],
  10. ]
  11. // 生成对应的Observable序列并订阅
  12. Observable.from(times)
  13. .flatMap {
  14. return Observable.of(Int($0["value"]!))
  15. .delaySubscription(Double($0["time"]!), scheduler: MainScheduler.instance)
  16. }
  17. .debounce(0.5, scheduler: MainScheduler.instance)
  18. .subscribe(onNext: { print($0) })
  19. .disposed(by: bag)

Operation之过滤操作符的更多相关文章

  1. RxJava系列4(过滤操作符)

    RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...

  2. RxJava2实战---第五章 变换操作符和过滤操作符

    RxJava2实战---第五章 变换操作符和过滤操作符 RxJava的变换操作符主要包括以下几种: map():对序列的每一项都用一个函数来变换Observable发射的数据序列. flatMap() ...

  3. RxJS之过滤操作符 ( Angular环境 )

    一 take操作符 只发出源 Observable 最初发出的的N个值 (N = count). 如果源发出值的数量小于 count 的话,那么它的所有值都将发出.然后它便完成,无论源 Observa ...

  4. Operation之变换操作符

    buffer buffer方法的作用是缓冲组合, 第一个参数是缓冲时间, 第二个参数是缓冲个数, 第三个参数是线程 该方法简单来说就是缓存Observable中发出的新元素, 当元素达到某个数量, 或 ...

  5. django之创建第8-2个项目-数据库数据提取之过滤操作符相关

    """1)age__gt = 16等价于age > 162)age = 163)age__gte = 16等价于age >= 164)name__contai ...

  6. Operation之结合操作符

    startWith 该方法会在Observable序列开始之前插入一些事件元素. 即发生事件消息之前, 会发出这些预先插入的事件消息 Observable.of("2", &quo ...

  7. RxJava【过滤】操作符 filter distinct throttle take skip first MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. RxJava 和 RxAndroid 二(操作符的使用)

    前言:对Rx不了解的朋友可以先看我的第一篇博文 RxJava 和 RxAndroid 一 (基础),是对Rxjava的基本介绍 1.merge操作符,合并观察对象 List<String> ...

  9. LINQ 操作符

    using System; using System.Collections.Generic; using System.Text; using System.Linq; namespace LinQ ...

随机推荐

  1. async和await执行顺序

    关于执行顺序和线程ID,写了一个小程序来检测学习: using System; using System.Net; using System.Threading; using System.Threa ...

  2. Linux学习26-linux查看某个时间段的日志(sed -n)-史上最详细

    前言 在linux上查找日志的时候,如果我想找出某个时间段的日志,比如查找今天早上8点到下午2点的日志. 用grep不太方便直接过滤出来,可以使用sed根据时间去查找 sed -n '/开始时间日期/ ...

  3. js动画--透明度变化

    对于设置元素的透明度的变化.主要思想也是通过一个定时器来控制的. 此外对于透明度有一点要说明一下,就是在IE中我们在css中设置透明度的方式filter:alpha(opacity:value)其中v ...

  4. discuz x3.3后台admin.php防止直接恶意访问

    功能说明:admin.php是discuz默认的后台地址,正常情况下可以直接访问,为了防止某些恶意访问的情况,可以修改以下内容进行安全性能提升. 适用版本:Discuz!x1-x3.3 具体实施方案: ...

  5. 网页禁止右键,禁止F12,禁止选中,禁止复制,禁止缓存等操作

    一.禁止右键 //方法一 document.onmousedown = function () { ) { return false; } } //方法二 document.oncontextmenu ...

  6. spark读写Oracle、hive的艰辛之路(二)-Oracle的date类型

    近期又有需求为:导入Oracle的表到hive库中: 关于spark读取Oracle到hive有以下两点需要说明: 1.数据量较小时,可以直接使用spark.read.jdbc(orclUrl,tab ...

  7. Oracle之常用sql

    SQL函数 本文PDF下载 本文示例数据库下载 一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范 ...

  8. bind的模拟实现

    bind 一句话介绍 bind: bind() 方法会创建一个新函数.当这个新函数被调用时,bind() 的第一个参数将作为它运行时的 this,之后的一序列参数将会在传递的实参前传入作为它的参数.( ...

  9. router.beforeEach、路由元信息、导航守卫与函数式编程

    一.函数的识别: 1.router.beforeEach:主函数.高阶函数.入口函数: 2.匿名参量函数:处理跳转过程中的附加逻辑 (to, from, next) => { if (to.ma ...

  10. [Java] Spring boot 的 SrpingSecurity 框架搭建

    参考: SrpingSecurity]之一:框架搭建https://blog.csdn.net/qq_28296925/article/details/82021092 [SpringSecurity ...