concatMap,flatMap,switchMap为单个项目

Dar*_*usL 3 rx-java

我知道之间的差异concatMap,flatMap以及switchMap,但如果我只流发出一个单一的项目和完成?在这种情况下,功能上(双关语)这两个运算符是相同的,但性能如何呢?如果输入仅发出单个项目,哪个运营商需要更多资源?大多数情况下,如果相关,输出也是单个项目.

aka*_*okd 5

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

否则,我们无法检测常规Observable是否仅发出单个项目,因此操作符将执行所有内部工作.您可以使用Single处理exaclty一个项目或错误的源.

我们有一堆JMH基准,但我不记得是否有一个用于比较1个元素源和这些运算符.也许我会添加一个并发布结果.

编辑

是一个比较基准.