Rx java 单个项目的concatMap、flatMap、switchMap

Rx java 单个项目的concatMap、flatMap、switchMap,rx-java,Rx Java,我知道concatMap、flatMap和switchMap之间的区别,但是如果我的流只发出一个项目并完成,会怎么样?在这种情况下,这两个操作符在功能上(并非有意双关语)是相同的,但性能如何?如果输入只发出一个项目,那么哪个操作员需要更多的资源?大多数情况下,如果相关,输出也是单个项。在最新的RxJava 1.x中,如果concatMap和flatMap的源被标识为标量(即只是),运算符未实例化,而是由自定义内部可观察的通过ScalarSynchronousSource.scalarFlatMa

我知道
concatMap
flatMap
switchMap
之间的区别,但是如果我的流只发出一个项目并完成,会怎么样?在这种情况下,这两个操作符在功能上(并非有意双关语)是相同的,但性能如何?如果输入只发出一个项目,那么哪个操作员需要更多的资源?大多数情况下,如果相关,输出也是单个项。

在最新的RxJava 1.x中,如果
concatMap
flatMap
的源被标识为标量(即
只是
),运算符未实例化,而是由自定义内部
可观察的
通过
ScalarSynchronousSource.scalarFlatMap
替换,该操作符的开销低于完整运算符
switchMap
也可以这样做,但尚未针对这种情况进行优化(可能不值得)

否则,我们无法检测一个常规的可观察对象是否只会发出一个项目,因此操作符将执行其所有内部工作。您可以使用
Single
处理发出一个项目或错误的源

我们有很多JMH基准,但我不记得是否有一个用于比较1元素源和这些操作符的基准。也许我会添加一个并发布结果

编辑


是一个比较基准。

因此
switchMap
concatMap
最适合我的情况?concatMap更好,因为flatMap会增加消耗单个源的开销。