簡體   English   中英

RxJava - Observable - 多個過濾器調用與一個過濾器調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM