架构师学习--rxjava操作符(创建操作符、变换操作符)使用

大家都清楚,Rxjava的问世给我们程序员带来了一大波福利,简单的链式调用就能实现比较复杂的功能,并且逻辑清晰,易于扩展。但是,对于它的学习,还是需要一定的时间成本的。其实它的设计模式主要就是观察者模式,只不过它不是标准版的观察者,它的一个被观察者(Observable)只能对应一个观察者(Observer),并且通过subscribe进行订阅观察者。,下面带大家学习,常用的Rxjava2操作符。

一、创建型操作符

1、create操作符

测试代码如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
总结:

  • 上游被观察者首先订阅下游观察者,调用onSubscribe()方法
  • 订阅完成后,上游被观察者通过发射器ObservableEmitter进行发射数据到下游
  • 下游观察者接收到数据,调用onNext()方法
  • 上游被观察者调用emitter.onComplete()方法,表示发射完毕,此时下游不会再接收到数据。下游此时会调用onComplete()方法
  • 下游调用完毕onComplete()方法后,才会继续执行上游的后续日志打印。
2、just操作符

测试代码如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
总结:

  • 这里并没有调用发射器进行发射数据,那是在just内部会自动发射数据。
  • 上游发射完毕后,会自动触发下游onComplete()方法。
3、fromArray操作符

测试代码如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
和just操作符类似,只是发射的数据类型为数组类型。

4、empty操作符

测试代码如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
总结:

  • 传递的数据类型只能为Object类型。
  • 下游onNext()方法不会执行。
  • 下游会触发onComplete()方法。
5、range操作符

测试代码如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
总结:

  • 这里并没有调用发射器进行发射数据,那是在range内部会自动发射数据。
  • 上游发射完毕后,会自动触发下游onComplete()方法。
  • range参数:第一个参数为起始数字,第二个参数为从起始位置开始,发送count个数,每次加1。
6、interval操作符

测试代码如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
不难发现,每隔1s钟就会执行下游的onNext()方法,即使我们把activity销毁掉,上游仍然会往下游发送数据,所以使用该操作符需要考虑内存泄漏的问题。

二、变换型操作符

1、map操作符

测试代码如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
最后打印的是bitmap类型。
总结:

  • 上游被观察者可以通过map操作符多次转换
  • 下游接收的数据以最后一次map转换作为最终数据
2、flatMap操作符

测试代码如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
总结:

  • 下游接收的数据是没有顺序的,说以flatMap是无序的。
  • flatMap需要重新发射新的数据。(ObservableSource是Observable的父类)
3、concatMap操作符

测试代码如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
总结:

  • 下游接收的数据是有顺序的,说以concatMap是有序的。
  • concatMap需要重新发射新的数据。
4、groupBy操作符

测试代码如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
总结:

  • 通过该操作符能够对数据进行分组发送,例子中发送两组
  • 如果需要拿到每一组具体的内容,可对GroupedObservable进行重新订阅
5、buffer操作符

测试代码如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
观察发现,每10个数据发射一次,并且下游接收的是list集合类型。
总结:

  • 下游接收数据类型为list集合类型
  • 每次发送的集合大小为缓存大小
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值