2016-01-05 62 views
-1

我有兩個目錄作爲最終文件列表的來源。這些文件被編號並需要在文件名的最後一個ArrayList中進行排序。形成來自兩個不同文件夾的文件名的排序列表

dir1/file1 
dir1/file2 
dir2/file3 
dir1/file4 

如何基於文件名而不是目錄對ArrayList進行排序?

+1

使用'Collections.sort()'並實現一個自定義的'Comparator'並傳遞給sort()方法。 – YoungHobbit

+0

文件名是否總是以數字結尾? – Bharatesh

+0

我正在收集來自不同圖形過程的幀,所以這些文件被命名爲frame000001.jpg – GianniTee

回答

3

爲了更改排序順序,您可以實現您自己的Comparator並使用它來更改默認順序,使用Collections.sort(arrayList, c)
下面的示例文件名不考慮大小寫字母順序比較:

java.util.Comparator<String> c = new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     String f1 = o1.substring(Math.max(0, o1.lastIndexOf("/")), o1.length()); 
     String f2 = o2.substring(Math.max(0, o2.lastIndexOf("/")), o2.length()); 
     return f1.compareToIgnoreCase(f2); 
    } 
}; 
Collections.sort(arrayList, c); 
+0

非常有趣。也許你可以縮短關鍵文件到文件名= filename.substring(filename.lastIndexOf('/')+ 1); – GianniTee

+0

如果我們按照從右到左的順序進行排序會怎樣?這個技巧會起作用嗎? – GianniTee

+0

你是什麼意思「從右到左排序」? –

1

這是不是一個真正的答案,只是除了Lee-Falcon's correct answer

比較器應該總是按照自然順序排序(這對字符串是字典順序的,對數字是上升的)。

一旦你實現你想要更改順序,您只需更換

return value; 

return -1 * value; 

但我會建議使用反向比較

Integer[] ar = { 1, 3, 2, 4}; 
    Arrays.sort(ar); // sort with natural ordering 
    System.out.println(Arrays.toString(ar)); 
    Arrays.sort(ar, Collections.reverseOrder()); // sort with reverse ordering 
    System.out.println(Arrays.toString(ar)); 

Collections.reverseOrder()也接受比較器實例:

Arrays.sort(ar, Collections.reverseOrder(c)); 
相關問題