看起来这两个功能非常相似。他们有相同的签名(接受rx.functions.Func1<? super T, ? extends Observable<? extends R>> func
),而且他们的弹珠图看起来一模一样。这里无法粘贴图片,但这是一张连续映射 http://netflix.github.io/RxJava/javadoc/rx/Observable.html#concatMap%28rx.functions.Func1%29,这是一个flatMap http://netflix.github.io/RxJava/javadoc/rx/Observable.html#flatMap%28rx.functions.Func1%29。结果的描述似乎存在一些细微的差异Observable
,其中一个由concatMap
包含由连接结果 Observables 所产生的项目,以及由flatMap
包含首先合并生成的 Observables 并发出该合并结果所产生的项目。
然而,这种微妙之处我完全不清楚。谁能更好地解释这种差异,并最好给出一些例子来说明这种差异。
正如您所写,这两个函数非常相似,细微的区别在于如何创建输出(在应用映射函数之后)。
平面地图用途合并运算符 https://github.com/Netflix/RxJava/wiki/Combining-Observables#merge而 concatMap 使用连接运算符 https://github.com/Netflix/RxJava/wiki/Mathematical-and-Aggregate-Operators#concat.
正如你所看到的 concatMap 输出序列是有序的 - 第一个 Observable 发出的所有项目都在第二个 Observable 发出的任何项目之前发出,
当 flatMap 输出序列被合并时 - 合并后的 Observable 发出的项目可以以任何顺序出现,无论它们来自哪个源 Observable。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)