我想过滤Observable发出的项目,但是我有很多过滤条件,我想知道这样做的更好方法是
一种方法是调用一个“过滤器”方法,该方法具有多个“ if”语句中的所有条件,并返回最终的过滤结果,然后调用:
observable
.filter(this::filter)
另一种方法是拥有多个“ filterX”方法,每个方法都按照特定的条件进行过滤,并在链中进行调用:
observable
.filter(this::filterX)
.filter(this::filterY)
.filter(this::filterZ)
我的问题是-是否存在性能差异?两者中的哪一项是“更好的实践”? 我发现第二种方法更好,更易读,但目前我遇到了一个带有约30个“ if”语句的“过滤器”方法,我想知道是否应该打扰并将其重构为第二种方法。
谢谢!
答案 0 :(得分:1)
RxJava库尝试使用Operator Fusion的概念来优化您描述的方案:
运算符融合的前提是,某些运算符可以组合为一个运算符(宏融合),或者它们的内部数据结构彼此共享(微融合),从而可以减少分配,降低开销并提高性能。>
在design document中给出了有关过滤运算符的具体示例:
- a是b,并且两个运算符的参数集可以组合到单个应用程序中。示例:filter(p1).filter(p2)合并为filter(p1 && p2)。
因此,在您的情况下,该库将尽最大努力组合所有过滤器,以免造成太大的性能差异。