java如何检查反向比较器和原始比较器的相等性?
前TL;DR:需要查看一个比较器是否是另一个比较器的实例(或等同于另一个比较器),即使它是反向的
你好,我认为这个问题很简单,但我只是想得太多了。 我有一个程序,允许用户通过不同的比较器对列表进行排序。用户可以选择升序或降序。由于比较器默认为升序,所以我要实现降序所做的就是创建一个新的反向比较器:
Comparator newReversedCMP = Collections.reverseOrder(Comparator originalComp)
程序的另一部分保存最后使用的比较器,以便用户可以排序或查看最后使用的比较器。假设我有一个处理姓名和薪水的比较器,还有一个返回它所处理的内容的方法,例如:
if (lastCMPUsed.equals(new NameComparator()){
return "Name";
}
if (lastCMPUsed.equals(new SalaryComparator()){
return "Salary";
}
抱歉这么长的介绍,但我的问题是,我还想返回“姓名”或“薪资”,即使它与原始姓名或薪资比较表相反。如果lastCMPUsed是反向顺序CMP,则它不会发现它们相等
我尝试过这一点,但没有成功:
//lastCMPUsed = Collections.reversedOrder(new NameComparator());
if (lastCMPUsed.equals(Collections.reverseOrder(new NameComparator())
return "Name";
这不会返回“Name”,并将它们视为不相等。 我在每个比较器中的equals方法是一个简单的检查实例
谢谢你的阅读
# 1 楼答案
如果除了the supertype定义的等式之外,还需要一些特定的等式定义,那么应该编写一个类结构来正确地实现这一点
例如:
这里的平等是:
注意,我不需要重写
equals
和hashCode
,因为每个可能的比较器只有一个实例