Виждал съм други въпроси относно това изключение, но моят метод за сравнение е толкова прост, че не мога да разбера какво не е наред с него и не мога да го възпроизведа с нито едно от устройствата с 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