一、map和faltMap的共同点和区别
1、共同点
- 都是依赖FuncX(入参,返回值)进行转换(将一个类型依据程序逻辑转换成另一种类型,根据入参和返回值)
- 都能在转换后直接被subscribe
2、区别
- map返回的是结果集,flatmap返回的是包含结果集的Observable(返回结果不同)
- map被订阅时每传递一个事件执行一次onNext方法,flatmap多用于多对多,一对多,再被转化为多个时,一般利用from/just进行一一分发,被订阅时将所有数据传递完毕汇总到一个Observable然后一一执行onNext方法(执行顺序不同)>>>>(如单纯用于一对一转换则和map相同)
- map只能单一转换,单一只的是只能一对一进行转换,指一个对象可以转化为另一个对象但是不能转换成对象数组(map返回结果集不能直接使用from/just再次进行事件分发,一旦转换成对象数组的话,再处理集合/数组的结果时需要利用for一一遍历取出,而使用RxJava就是为了剔除这样的嵌套结构,使得整体的逻辑性更强。)
- flatmap既可以单一转换也可以一对多/多对多转换,flatmap要求返回Observable,因此可以再内部进行from/just的再次事件分发,一一取出单一对象(转换对象的能力不同)
这两者都是遍历RDD中数据,并对数据进行数据操作,并且会的到一个全新RDD
Map多用于计算或处理一些特殊数据类型,不能使用扁平化处理的数据类型
flatMap不仅可以对数据遍历处理,而且可以将存在RDD中集合中数据进行处理并且存储到一个新的集合中
所以两种的使用本质上没有区别,但flatMap比Map多出了对集合数据压平的作用
flatMap(转换)
map操作符:实现的是一对一的转换,会对每一条输入应用Function,然后返回一个Observable对象。
即数据源发送了多少条数据给map加工,map就返回了多少个Observable
flatMap操作符:先执行map的操作,之后把多个结果Observable汇入同一个Observable统一对结果数据进行下发
flatMap的原理:
1. 使用传入的事件(单个数据项)创建一个 Observable 对象,激活并使它开始发送事件;
2. 每一个创建出来的 Observable 发送的事件,转换(应用Function)后汇入同一个 Observable ,
而这个 Observable 负责将这些事件统一发放。
flatMap把事件拆成了两级,通过一组新创建的 Observable 将初始的对象『铺平』之后通过统一路径
(汇入同一个Observable)分发了下去。而这个『铺平』就是 flatMap() 所谓的 flat。
flatMap并不能保证事件的顺序,如果需要保证,需要用到concatMap
网友评论