我們有一個網頁,用戶可以在其中選擇任意數量的規則來過濾和排序一組項目。對于每條規則,他都為其設置了優先級,用戶可以使用該優先級定義規則應如何應用的順序。從這組規則中,我提取 Comparator(如果規則正在排序)和/或 Predicates(如果用戶想要過濾項目)對象。我想將它們與一系列項目一起使用,以便對它們進行過濾和排序。我的問題是,應用 Comparator 和 Predicate 對象的順序重要嗎?我知道 Comparator 對象的順序很重要,但是 Predicate 出現在開頭還是結尾有關系嗎?例如:We have Comparator objects: comparator1, comparator2We have Predicate objects: predicate1, predicate2Is there a difference between applying them in the following orders:- comparator1, comparator2, predicate1, predicate2- predicate1, predicate2, comparator1, comparator2- predicate1, comparator1, predicate2, comparator2- predicate2, comparator1, comparator2, predicate1Note: comparator1 always appears before comparator2. I am aware that changing their order could result in different results in terms of sorting.現在,我認為上述所有情況都會導致相同的輸出(就排序和項目而言)。這將允許我先應用所有過濾器,然后再進行排序。但是我不確定,所以我不得不在這里問。
2 回答

jeck貓
TA貢獻1909條經驗 獲得超7個贊
過濾在排序之前進行。
比較器的順序很重要。
Comparator#thenComparing
按照用戶指定的順序查看復合比較器。謂詞的順序無關緊要(除非它們是有狀態的或依賴于其他謂詞,必須避免這種情況)。
Predicate#and
以任何順序查看復合謂詞。

catspeake
TA貢獻1111條經驗 獲得超0個贊
如果您的謂詞是無狀態的并且不修改它們測試的對象,那么它們是關系代數方面的選擇。因此,它們的順序對最終結果無關緊要。
但是,性能可能存在差異。通常建議首先應用快速和高度選擇性的謂詞。篩選后排序也會更快。
另一方面,根據您所做的事情,這些好處可能微不足道。在這種情況下,您應該選擇使您的代碼最容易理解和維護的順序。
添加回答
舉報
0/150
提交
取消