【发布时间】:2017-05-21 06:45:39
【问题描述】:
为什么RxJava 1.x flatMap() 操作符是用merge实现的?
public final <R> Observable<R> flatMap(Func1<? super T, ? extends Observable<? extends R>> func) {
if (getClass() == ScalarSynchronousObservable.class) {
return ((ScalarSynchronousObservable<T>)this).scalarFlatMap(func);
}
return merge(map(func));
}
从 flatMap() 调用中,我只能返回一个符合 <? extends Observable<? extends R>> 的 Observable。比 map(func) 调用将它包装到另一个 Observable 中,这样我们就有了类似Observable<? extends Observable<? extends R>> 的东西。这让我认为 map(func) 之后的 merge() 调用是不必要的。
merge() 运算符执行以下操作:
将发出 Observable 的 Observable 扁平化为单个 Observable 发出那些 Observables 发出的项目,没有任何 转型。
现在在平面地图中,我们只能有一个发出一个 Observable 的 Observable。为什么要合并?我在这里错过了什么?
谢谢。
【问题讨论】:
标签: rx-java rx-android flatmap