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