我正在开发一个旧应用程序,它最初是用 Java 6 编写的,几年前升级到 Java 7。
在这个应用程序中,我使用 Collection.Sortcompare
通过实现Comparator
接口使用自定义方法对列表进行排序。列表中的对象类型有CompanySchedule
3 个属性companyName
和。 Schedule
expirationdate
列表可以包含多个具有相同companyName
但具有唯一到期日期的对象。下面的比较函数按公司名称的升序对列表进行排序,并在同一公司名称列表中按到期日期的降序对列表进行排序。下面是方法实现。
public int compare(CompanySchedule c1, CompanySchedule c2) {
int returnVal = 0;
int value = c1.getCompany().getName().compareTo(c2.getCompany().getName());
if (value == 0){
if (c1.getUseExpirationDate() == null || c2.getUseExpirationDate() == null){
returnVal = -1;
}
else{
int chkdate = c1.getUseExpirationDate().compareTo(c2.getUseExpirationDate());
if (chkdate == 0){
returnVal = 0;
}
else if (chkdate > 0){
returnVal = -1;
}
else if (chkdate < 0){
returnVal = 1;
}
}
}
else if (value < 0){
returnVal = -1;
}
else if (value > 0){
returnVal = 1;
}
return returnVal;
}
我知道在上面的比较方法实现中不满足传递属性时
java.lang.IllegalArgumentException: Comparison method violates its general contract
会抛出错误。
有人可以帮助确定此方法在何处违反传递性。谢谢您的帮助。