Исключение при сортировке списка объектов на основе свойства даты (тип String) - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь отсортировать список объектов по датам (в строке). Даты представлены в виде строки, и объектам присваивается значение свойства даты «-», если с ними нет даты. Я делаю приведенный ниже фрагмент кода, чтобы отсортировать его, однако в какой-то момент он дает мне исключение « Метод сравнения нарушает его общий контракт ». Я не могу понять, где контракт нарушается и как.

Я смотрел в другие темы, но не мог получить большую помощь.

Какие-либо данные, что я могу делать не так?

Collections.sort(listOfObjects, new Comparator<ObjectType>(){

            @Override
            public int compare(ObjectType objectOne, ObjectType objectTwo) {
                if(sortType.equalsIgnoreCase("asc")){
                        if(objectOne.getSomeDate().equalsIgnoreCase("-"))
                            return 1;
                        if(objectTwo.getDeliveryQueueResponseDTO().getSomeDate().equalsIgnoreCase("-"))
                            return -1;
                        sort = objectOne.getSomeDate().compareToIgnoreCase(objectTwo.getSomeDate());
                    }
                    else
                        sort = objectTwo.getSomeDate().compareToIgnoreCase(objectOne.getSomeDate());
                }

return sort;
}

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Вы должны правильно реализовать сравнение с "-" (пустые даты).

Если вы не получите эти a="-" и b="-", у вас есть эти compare(a,b)==1 и compare(b,a)==1, то есть a>b и b>a, которые не имеют смысла.

0 голосов
/ 15 ноября 2018

Это в основном означает, что ваш компаратор не является переходным. Для более подробной информации, посмотрите на этот вопрос:

«Метод сравнения нарушает общий договор!»

...