为了账号安全,请及时绑定邮箱和手机立即绑定

应用比较器和谓词的顺序重要吗?

应用比较器和谓词的顺序重要吗?

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

  1. 过滤在排序之前进行。

  2. 比较器的顺序很重要。Comparator#thenComparing按照用户指定的顺序查看复合比较器。

  3. 谓词的顺序无关紧要(除非它们是有状态的或依赖于其他谓词,必须避免这种情况)。Predicate#and以任何顺序查看复合谓词。


查看完整回答
反对 回复 2023-02-16
?
catspeake

TA贡献1111条经验 获得超0个赞

如果您的谓词是无状态的并且不修改它们测试的对象,那么它们是关系代数方面的选择。因此,它们的顺序对最终结果无关紧要。


但是,性能可能存在差异。通常建议首先应用快速和高度选择性的谓词。筛选后排序也会更快。


另一方面,根据您所做的事情,这些好处可能微不足道。在这种情况下,您应该选择使您的代码最容易理解和维护的顺序。


查看完整回答
反对 回复 2023-02-16
  • 2 回答
  • 0 关注
  • 62 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信