我有一個檔案串列,我試圖按照最近修改日期到最近修改日期的順序對這些檔案進行排序。日期存盤為一個長值(自紀元以來的毫秒數),我使用 Collections.sort 對檔案進行排序。我希望檔案從最近到最近(從上到下),所以我在比較器中做了 R2-R1 而不是 R1-R2。我使用的代碼如下所示:
Collections.sort(temp, new Comparator<RecordingFile>() {
@Override
public int compare(RecordingFile R1, RecordingFile R2) {
int x = (int) (R2.getLastModfied()-R1.getLastModfied());
return Integer.compare(x, 0);
}
});
這段代碼產生了類似這樣的結果:
14-04-2022
10-04-2022
06-04-2022
05-04-2022
20-03-2022
...
18-04-2022
18-04-2022
17-04-2022
該串列以某種方式正確排序但同時不正確。這些檔案是按部分而不是全部排序的。我嘗試在訂購之前對串列進行洗牌,結果產生了不同的順序,但仍然是相同的行為(有序但部分)。為了解決這個問題,我在比較器中做了 R1-R2,然后反轉排序串列。這導致了一個完全排序的串列,該串列考慮了串列中的所有專案。
我想知道是否有人知道為什么會這樣?
uj5u.com熱心網友回復:
就像在評論中一樣,嘗試使用Comparator.comparing(RecordingFile::getLastModfied).reversed()而不是手動進行。
如果您決定仍然手動執行,請檢查lastModfied型別,因為如果它是 along那么您不應該將比較的最終結果回傳為int
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/462139.html
