RxJava-可观察-多个筛选器调用与一个筛选器调用

RxJava-可观察-多个筛选器调用与一个筛选器调用,java,rx-java,rx-java2,Java,Rx Java,Rx Java2,我想过滤由可观察对象发出的项,但我有很多过滤标准,我想知道做这件事的更好方法是什么——性能方面的 一种方法是调用一个“filter”方法,该方法在多个“if”语句中包含所有标准并返回最终筛选结果,并调用: observable .filter(this::filter) 另一种方法是使用多个“filterX”方法,每个方法根据特定条件进行过滤,并在链中调用它们: observable .filter(this::filterX) .filter(this::filter

我想过滤由可观察对象发出的项,但我有很多过滤标准,我想知道做这件事的更好方法是什么——性能方面的

一种方法是调用一个“filter”方法,该方法在多个“if”语句中包含所有标准并返回最终筛选结果,并调用:

observable
    .filter(this::filter)
另一种方法是使用多个“filterX”方法,每个方法根据特定条件进行过滤,并在链中调用它们:

observable
    .filter(this::filterX)
    .filter(this::filterY)
    .filter(this::filterZ)
我的问题是-有没有任何表现上的差异,这两者中哪一个是“更好的实践”?
我发现第二种方法更好,可读性更好,但目前我遇到了一个包含30条“if”语句的“filter”方法,我想知道是否应该麻烦并将其重构为第二种方法。

RxJava库尝试使用以下概念优化您描述的场景:

操作员融合的前提是,某些操作员可以组合成单个操作员(宏融合)或彼此共享的内部数据结构(微融合),从而实现更少的分配、更低的开销和更好的性能

它给出了有关中过滤器运算符的具体示例:

  • a是b,两个操作员的参数集可以组合成一个应用程序。示例:过滤器(p1)。过滤器(p2)组合成过滤器(p1&&p2)
因此,在您的情况下,库将尽最大努力组合所有过滤器,以便不会有太大的性能差异