1. 变换
map()
它是一对一的
1 | Observable.just("image/logo.png")//输入类型String,图片地址 |
flatMap()
多对多转换
假如有这样一个场景,我们需要打印每个学生所修的课程,学生是一个集合,课程也是一个集合,如果按照map()
的做法如下:
这里我选用我项目里随意一个bean 对象,意思不变
1 | UserInfo[] userInfos = new UserInfo[3]; |
有种情况就是假如我不想要循环遍历呢,而是直接拿到 AppInfo
对象,显然 map()
是无法实现的,map()
我们前面也说过是 一对一的转换,而现在是一对多,那此时就应该用 flatMap()
.
使用flatMap()
的话,如下:
1 | Observable.from(userInfos) |
上述是用 flatMap()
编写的,去除了 for
循环,flatMap()
和 map()
有一个相同点:它们都是把传入的参数转化之后返回另一个对象。但需要注意的是,和map()
不同的是,flatMap()
中返回的是 Observable
对象。
flatMap()
原理如下:
- 使用传入的事件对象创建一个
Observable
对象; - 并不发送这个
Observable
对象,而是将它激活,于是它开始发送事件; - 每一个创建出来的
Observable
发送的事件,都被汇入同一个Observable
,而这个Observale
负责将这些事件统一交给Subscriber
的回调方法。