我们有一个网页,用户可以在其中选择任意数量的规则来过滤和排序一组项目。对于每条规则,他都为其设置了优先级,用户可以使用该优先级定义规则应如何应用的顺序。从这组规则中,我提取 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
提交
取消