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会增加消耗单个源的开销。