2016-07-15 62 views
1

這是我的代碼拋出異常樓下:比較方法違反其總體合同!中的Array.sort()

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) 

UPDATE:更改了代碼

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

現在這正顯示出:

enter image description here

+0

請註明在這裏先回答你的例外 –

+0

看:它可以將文件,同時修改排序?](http://stackoverflow.com/questions/34672595/comparison-method -violates-its-general-contract-when-sorting-files) –

回答

1

要轉換的第一lastModifiedLong,而不是第二。試試這個:

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

mhh,我根據你的建議改變了它,但現在Android Studio提供了一些建議。我編輯了我的帖子。 –

+0

Autoboxing負責轉換。 *自動裝箱是Java編譯器在基元類型和它們相應的對象包裝類之間進行的自動轉換* – Blackbelt

相關問題