[英]RxJava - Observable - multiple filter calls vs one filter call
我想過濾一個Observable發出的項目,但是我有很多過濾器標准,我想知道更好的方法是什么 - 性能明智。
一種方法是調用一個 “過濾器”方法,該方法在多個“if”語句中包含所有標准並返回最終過濾結果,並調用:
observable
.filter(this::filter)
另一種方法是使用多個“filterX”方法,每個方法按特定標准過濾,並在鏈中調用它們:
observable
.filter(this::filterX)
.filter(this::filterY)
.filter(this::filterZ)
我的問題是 - 是否有任何性能差異,兩者中的哪一個是“更好的做法”? 我發現第二個更好,更可讀,但是目前我遇到了一個“過濾器”方法,有~30'if'語句,我想知道我是否應該打擾並重構它到第二種方法。
RxJava庫嘗試使用Operator Fusion的概念優化您描述的場景:
運算符融合的前提是某些運算符可以組合成一個單獨的運算符(宏融合)或它們彼此共享的內部數據結構(微融合),從而允許更少的分配,更低的開銷和更好的性能。
它給出了設計文檔中過濾器運算符的具體示例:
- a是b,兩個運算符的參數集可以組合成一個應用程序。 示例:過濾器(p1).filter(p2)組合成過濾器(p1 && p2)。
因此,在您的情況下,庫將盡力組合所有過濾器,以便沒有太多的性能差異。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.