sas*_*sas 3 java rx-java rx-java2
我想过滤 Observable 发出的项目,但我有很多过滤条件,我想知道什么是更好的方法 - 性能方面。
一种方法是调用一个“过滤器”方法,该方法具有多个“if”语句中的所有条件并返回最终过滤结果,然后调用:
observable
.filter(this::filter)
Run Code Online (Sandbox Code Playgroud)
另一种方法是拥有多个“filterX”方法,每个方法按特定条件过滤,并在链中调用它们:
observable
.filter(this::filterX)
.filter(this::filterY)
.filter(this::filterZ)
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 是否有任何性能差异,两者中哪一个是“更好的做法”?我发现第二个更好,更易读,但目前我遇到了一个带有 ~30 个“if”语句的“过滤器”方法,我想知道我是否应该打扰并将它重构为第二种方法。
RxJava 库尝试用Operator Fusion的概念来优化你所描述的场景:
算子融合的前提是某些算子可以组合成一个单一的算子(宏融合)或其内部数据结构彼此共享(微融合),从而允许更少的分配、更低的开销和更好的性能。
它在设计文档中给出了一个关于过滤器运算符的具体示例:
- a 是 b 并且两个算子的参数集可以合并为一个应用程序。示例:filter(p1).filter(p2) 组合成 filter(p1 && p2)。
因此,在您的情况下,库将尽最大努力组合所有过滤器,以免产生太大的性能差异。
| 归档时间: |
|
| 查看次数: |
667 次 |
| 最近记录: |