Android RxJava操作符详解系列: 变换操作符
来源:互联网 发布:mac隐藏下方菜单栏 编辑:程序博客网 时间:2024/05/22 17:22
转自---http://blog.csdn.net/carson_ho/article/details/78315437
前言
Rxjava
,由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大Android
开发者的欢迎。
如果还不了解
RxJava
,请看文章:Android:这是一篇 清晰 & 易懂的Rxjava 入门教程
RxJava
如此受欢迎的原因,在于其提供了丰富 & 功能强大的操作符,几乎能完成所有的功能需求- 今天,我将为大家详细介绍
RxJava
操作符中最常用的变换操作符,并附带 Retrofit 结合 RxJava的实例Demo教学,希望你们会喜欢。
- 本系列文章主要基于
Rxjava 2.0
- 接下来的时间,我将持续推出
Android
中Rxjava 2.0
的一系列文章,包括原理、操作符、应用场景、背压等等 ,有兴趣可以继续关注Carson_Ho的安卓开发笔记!!
目录
1. 作用
- 对事件序列中的事件 / 整个事件序列 进行加工处理(即变换),使得其转变成不同的事件 / 整个事件序列
- 具体原理如下
2. 类型
RxJava
中常见的变换操作符如下:下面,我将对每种操作符进行详细介绍
注:本文只讲解
RxJava2
在开发过程中常用的变换操作符
3. 应用场景 & 对应操作符 介绍
- 下面,我将对
RxJava2
中的变换操作符进行逐个讲解 - 注:在使用
RxJava 2
操作符前,记得在项目的Gradle
中添加依赖:
3.1 Map()
作用
对 被观察者发送的每1个事件都通过 指定的函数 处理,从而变换成另外一种事件即, 将被观察者发送的事件转换为任意的类型事件。
原理
应用场景
数据类型转换具体使用
下面以将 使用Map()
将事件的参数从 整型 变换成 字符串类型 为例子说明
- 测试结果
从上面可以看出,map()
将参数中的 Integer
类型对象转换成一个 String
类型 对象后返回
同时,事件的参数类型也由
Integer
类型变成了String
类型
3.2 FlatMap()
作用:将被观察者发送的事件序列进行 拆分 & 单独转换,再合并成一个新的事件序列,最后再进行发送
原理
- 为事件序列中每个事件都创建一个
Observable
对象; - 将对每个 原始事件 转换后的 新事件 都放入到对应
Observable
对象; - 将新建的每个
Observable
都合并到一个 新建的、总的Observable
对象; - 新建的、总的
Observable
对象 将 新合并的事件序列 发送给观察者(Observer
)
- 为事件序列中每个事件都创建一个
应用场景
无序的将被观察者发送的整个事件序列进行变换具体使用
- 测试结果
注:新合并生成的事件序列顺序是无序的,即 与旧序列发送事件的顺序无关
3.3 ConcatMap()
- 作用:类似
FlatMap()
操作符 与
FlatMap
()的 区别在于:拆分 & 重新合并生成的事件序列 的顺序 = 被观察者旧序列生产的顺序原理
应用场景
有序的将被观察者发送的整个事件序列进行变换具体使用
- 测试结果
注:新合并生成的事件序列顺序是有序的,即 严格按照旧序列发送事件的顺序
3.4 Buffer()
作用
定期从 被观察者(Obervable
)需要发送的事件中 获取一定数量的事件 & 放到缓存区中,最终发送原理
应用场景
缓存被观察者发送的事件具体使用
那么,Buffer()
每次是获取多少个事件放到缓存区中的呢?下面我将通过一个例子来说明
- 测试结果
- 过程解释
下面,我将通过一个图来解释Buffer()
原理 & 整个例子的结果
至此,关于RxJava2
中主要的变换操作符已经讲解完毕
4. 实际开发需求案例
- 变换操作符的主要开发需求场景 = 嵌套回调(
Callback hell
) - 下面,我将采用一个实际应用场景实例来讲解嵌套回调(
Callback hell
)具体请看文章Android RxJava 实际应用案例讲解:网络请求嵌套回调
5. Demo地址
上述所有的Demo
源代码都存放在:Carson_Ho的Github地址:RxJava2_变换操作符
喜欢的麻烦点个
star
!
6. 总结
- 下面,我将用一张图总结
RxJava2
中常用的变换操作符
- 接下来的时间,我将持续推出
Android
中Rxjava 2.0
的一系列文章,包括原理、操作符、应用场景、背压等等 ,有兴趣可以继续关注Carson_Ho的安卓开发笔记!!
- Android RxJava操作符详解系列: 变换操作符
- Android RxJava操作符详解系列: 变换操作符
- Android RxJava操作符详解系列: 变换操作符
- RxJava系列之二 变换类操作符详解1
- Android RxJava操作符详解系列: 创建操作符
- Android RxJava操作符详解 系列:组合 / 合并操作符
- Android RxJava操作符详解系列: 创建操作符
- Android RxJava操作符详解 系列:功能性操作符
- Android RxJava 操作符详解系列:过滤操作符
- Android RxJava操作符详解系列: 创建操作符
- Android RxJava操作符详解 系列:组合 / 合并操作符
- Android RxJava操作符详解 系列:功能性操作符
- Android RxJava 操作符详解系列:过滤操作符
- RxJava操作符(2)-变换
- RxJava 系列之变换操作符map(2)
- RxJava 系列之变换操作符flatmap(2)
- RxJava系列(二、详解操作符)
- RxJava系列:操作符
- Unity5权威讲解之菜鸟读书笔记(一)
- [算法笔记]选二取一
- 【Lintcode】加一
- ImageLoader
- JDK中rt.jar、tools.jar和dt.jar作用
- Android RxJava操作符详解系列: 变换操作符
- 为opencv添加附加依赖库
- 【P1059】明明的随机数(sort+unique)
- linux mysql5.7报err 1055错误 sql_mode=only_full_group_by
- 芯片选择LL库还是HAL库
- VS Nuget安装 "System.AggregateException”异常问题解决
- 用java代码编写金字塔
- MYSQL的分表备份案例及方案
- Java其他流