比较方法违反了其总合同!中的Array.sort()

时间:2016-07-15 14:23:09

标签: android arrays sorting

这是我的代码,它将下面的异常抛出:

Arrays.sort(listFile, new Comparator<File>() {
        public int compare(File f1, File f2) {
               return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
        }
});

我认为它可能是Java 7中的Java语言更改,但我不知道我必须更改它才能正常工作。非常感谢你!

Fatal Exception: 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:406)
   at java.util.TimSort.sort(TimSort.java:210)
   at java.util.TimSort.sort(TimSort.java:169)
   at java.util.Arrays.sort(Arrays.java:2010)
   at de.munichsdorfer.screenittrial.contentobserver.MyContentObserver.onChange(MyContentObserver.java:51)
   at android.database.ContentObserver.onChange(ContentObserver.java:145)
   at android.database.ContentObserver$NotificationRunnable.run(ContentObserver.java:216)
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:145)
   at android.os.HandlerThread.run(HandlerThread.java:61)

更新:将代码更改为

return Long.valueOf(f1.lastModified()).compareTo(Long.valueOf(f2.lastModified()));

现在显示:

enter image description here

1 个答案:

答案 0 :(得分:1)

您要将第一个lastModified转换为Long,而不是第二个return Long.valueOf(f1.lastModified()).compareTo(Long.valueOf(f2.lastModified())); 。试试这个:

Mapping DestinationExtractConcept