我想過濾 Observable 發出的項目,但我有很多過濾條件,我想知道更好的方法是什么 - 性能方面。一種方法是調用一個“filter”方法,該方法具有多個“if”語句中的所有條件并返回最終過濾結果,并調用:observable .filter(this::filter)另一種方法是擁有多個“filterX”方法,每個方法都按特定條件進行過濾,并在鏈中調用它們:observable .filter(this::filterX) .filter(this::filterY) .filter(this::filterZ)我的問題是 - 是否存在任何性能差異,兩者中哪一個是“更好的做法”?我發現第二個更好,更易讀,但目前我遇到了一個帶有 ~30 個“if”語句的“過濾器”方法,我想知道我是否應該打擾并將其重構為第二種方法。
1 回答

天涯盡頭無女友
TA貢獻1831條經驗 獲得超9個贊
RxJava 庫嘗試使用Operator Fusion的概念優化您描述的場景:
運算符融合的前提是某些運算符可以組合成一個單一的運算符(宏融合)或它們之間共享的內部數據結構(微融合),從而允許更少的分配、更低的開銷和更好的性能。
它在設計文檔中給出了有關過濾器運算符的具體示例:
a is b 并且兩個運算符的參數集可以組合成一個應用程序。示例:filter(p1).filter(p2) 組合成 filter(p1 && p2)。
因此,在您的情況下,庫將盡力組合所有過濾器,以免性能差異太大。
添加回答
舉報
0/150
提交
取消