Я работаю над старым приложением, которое изначально было написано в Java 6 и которое было обновлено до Java 7 пару лет go.
В этом приложении я использую коллекцию Collection.Sort для сортировки списка с помощью пользовательского метода compare
путем реализации интерфейса Comparator
. Типами объектов в списке являются CompanySchedule
, которые имеют 3 свойства companyName
, Schedule
и expirationdate
.
Список может содержать несколько объектов с одинаковым companyName
, но с уникальной датой истечения срока действия. Ниже функция сравнения сортирует список в порядке возрастания companyName и с тем же списком 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
.
может кто-то помочь определить, где этот метод будет нарушает переходное свойство. Спасибо за помощь.