Collections.sort(cells, new Comparator<MyCell>() {
@Override
public int compare(MyCell o1, MyCell o2) {
if (o1.getX() <= o2.getX() && o1.getY() <= o2.getY()) {
return -1;
} else {
return 1;
}
}
});
Здесь полные трассировки стеки:Метод сравнения нарушает его генподряд, с длинным сравнительной
Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(Unknown Source)
at java.util.TimSort.mergeAt(Unknown Source)
at java.util.TimSort.mergeCollapse(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
Я знаю, что есть много вопросов, как это одно, но я не понимаю, почему мой Comparision неправильно , getX() и getY() возвращает long. Итак, как я могу это исправить?
Я уже искал его, но не получил ответа.
Заранее спасибо.
Я уже нашел этот ответ, но я не понимаю, как изменить код emy, чтобы он работал? – Sarajog
Это зависит от того, что делают X и Y. Вы не можете изменить код поверхностно, чтобы выполнить эту работу. Вам придется реализовать другой метод сравнения. Проблема состоит в том, что если A имеет X, Y 2,3 и B имеет 1,5, этот метод скажет мне, что A, B, что A больше B, но для B, A, B больше A. Там это не согласованность! Подумайте о том, как обрабатывать случаи X1> X2, но Y1 <= Y2 или наоборот, возвращая 0. – isaach1000
Хорошо, спасибо, я просто понял, что мне нужно проверить что-то еще, потому что это не даст результат, который я хотел. – Sarajog