Я видел другие вопросы об этом исключении, но мой метод сравнения настолько прост, что я не могу понять, что с ним не так, и я не могу воспроизвести его ни на одном из принадлежащих мне устройств Android.
Я получаю это исключение от некоторых пользователей моего приложения для Android, большинство из которых, похоже, работают на очень новых устройствах, таких как GS3 или GS4, которые, как я предполагаю, запускают вариант сортировки слиянием Java 7.
Вот мой метод сравнения:
Collections.sort(collectionOfThings, new Comparator<Thing>()
{
public int compare(Thing lhs, Thing rhs)
{
//getDist() returns a Double with a capital D...perhaps that has something to do with it?
if(lhs.getDist() < rhs.getDist())
{
return -1;
}
if(lhs.getDist() == rhs.getDist())
{
return 0;
}
return 1;
};
});
Вот исключение:
Caused by: java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(TimSort.java:743)
at java.util.TimSort.mergeAt(TimSort.java:479)
at java.util.TimSort.mergeCollapse(TimSort.java:404)
at java.util.TimSort.sort(TimSort.java:210)
at java.util.TimSort.sort(TimSort.java:169)
at java.util.Arrays.sort(Arrays.java:2038)
at java.util.Collections.sort(Collections.java:1891)
Кажется, ограничен Android 4.0+. Любая помощь приветствуется.
return lhs.getDist().compareTo(rhs.getDist());
docs.oracle.com/javase/6/docs/api/java/lang/ - person Ken Wolf   schedule 15.07.2013Thing.getDist()
изменяетThing
? - person Ted Hopp   schedule 15.07.2013