我知道concatMap
,flatMap
和switchMap
之间存在差异,但如果我的流只发出一个项目并完成,该怎么办?在这种情况下,功能上(双关语)这两个运算符是相同的,但性能如何呢?如果输入仅发出单个项目,哪个运营商需要更多资源?大多数情况下,如果相关,输出也是单个项目。
答案 0 :(得分:5)
在最新的RxJava 1.x中,如果concatMap
和flatMap
的源被标识为标量(即just
),则运算符不会被实例化,而是由自定义替换内部Observable
通过ScalarSynchronousSource.scalarFlatMap
,其开销低于完整运算符。 switchMap
可以做同样的事情但尚未针对此案例进行优化(可能不值得)。
否则,我们无法检测常规Observable是否仅发出单个项目,因此操作符将执行所有内部工作。您可以使用Single
来处理发布exaclty one item或错误的源。
我们有一堆JMH基准,但我不记得是否有一个用于比较1个元素源和这些运算符。也许我会添加一个并发布结果。
修改强>
Here是比较基准。