2012-11-19 52 views
0

我有3個列表,這樣它們的元素的順序很重要:
排序幾個「關聯性」列出

names: [a, b, c, d] 
files: [a-file, b-file, c-file, d-file] 
counts: [a-count, b-count, c-count, d-count] 

我需要梳理個個字母基礎上,List<String> names元素。
有人可以解釋我如何做到這一點?

+10

使用數據結構而不是「並行列表」。 – millimoose

+0

我的理解是,如果'names'是'[d,c,b,a]',你會希望'files'和'counts'是反向字母順序?我認爲更詳細一些可能會有用,但很可能您正在尋找'比較器''接口,您可以向'List.sort()'提供' – Thor84no

+0

要詳細說明「毫無好處」的建議 - 數據結構/類。 –

回答

5

創建一個類來保存的元組:

class NameFileCount { 
    String name; 
    File file; 
    int count; 

    public NameFileCount(String name, File file, int count) { 
     ... 
    } 
} 

然後一羣來自三個列表中的數據到這個類的一個列表:

List<NameFileCount> nfcs = new ArrayList<>(); 
for (int i = 0; i < names.size(); i++) { 
    NameFileCount nfc = new NameFileCount(
     names.get(i), 
     files.get(i), 
     counts.get(i) 
    ); 
    nfcs.add(nfc); 
} 

和排序該列表由name,使用自定義比較器:

Collections.sort(nfcs, new Comparator<NameFileCount>() { 
    public int compare(NameFileCount x, NameFileCount y) { 
     return x.name.compareTo(y.name); 
    } 
}); 

(屬性存取器,空檢查等被省略簡潔)。

+2

或者實現'Comparable '並使'Collections.sort()'更加可重用。 – Thor84no

+0

非常感謝,我幫你解決了這個問題。 – sonderlain