作用
根据Observable发射的每个数据创建一个Observable,然后将这些Observable发射的数据合并到一起放进单个Observable。把每个数据变成一个Observable,可以理解为将一个数据变为一个序列,这样每个数据经过“一对N”的处理再全部收集起来。这其实很像一个平展铺开的操作,所以用”Flat”命名。
在一些场景下,这个操作符非常有用。例如:当我们得到一个数据集合,集合里每个数据都是Observable。使用这个操作符可以很方便的得到所有Observable发射的完整数据。
所有的Observable在FlatMap在底层用Mearge
操作符合并的,所以最后得到的结果可能交叉的。使用ConcatMap
就不会出现数据交叉的情况。
示例
注释:代码使用RxJava2,版本号2.2.19。
重载方法太多,选择其中的核心几类进行梳理,其他的都是在核心的基础上的小功能扩展。
**flatMap(Function<? super T, ? extends ObservableSource<? extends R>> mapper)**
**flatMap(Function<? super T, ? extends ObservableSource<? extends R>> mapper, boolean delayErrors)**
参数mapper:负责根据接收到的内容生成Observable。
参数delayError:为true的时候,如果源Observable和内部的Observable发出的onError通知会被搁置。直到所有的Observable终止才会发送。
flatMap( Function onNextMapper,Function onErrorMapper,Callable onCompleteSupplier)
(精简了方法中的泛型信息)
参数onNextMapper:负责根据接收到的内容生成Observable。
参数onErrorMapper:负责根据接收到的错误通知生成Observable。
参数onCompleteSuplier:负责处理接收到的完成通知生成Observable。
Observable<Integer> afterFlatMap = fromArray.flatMap(new Function<String, ObservableSource<Integer>>() {
@Override
public ObservableSource<Integer> apply(String s) {
//TODO
return null;
}
});