2012-07-28 44 views
0

我想對此映射進行排序:如何排序HashMap的字符串,收藏<String []>>由字符串[指數]

Map<String, Collection<String[]>> map = new HashMap<String, Collection<String[]>>(); 

在地圖例如:

String key = "MyKey"; 
Collection<String[]> values = new ArrayList<String[]>(); 
map.put(key, values); 

String[] firstValues = { "John", "21", "M"}; 
values.add(firstValues); //Name, Age, Gender 

String[] secondValues = { "Jane", "31", "W"}; 
values.add(secondValues); 

所以finnaly,我有: map with:

Mykey : [["John", "21", "M"], ["Eve", "31", "W"]]; 

,我想這樣做:

Collection<String[]> values = map.get(key); 

,然後通過具體指標,例如通過第一指數(名)按字母順序,或通過 第二指數(年齡)排序。所以後第一個排序是:

Mykey : [["Eve", "31", "W"], ["John", "21", "M"]]; 

後第二次排序:

Mykey : [["John", "21", "M"], ["Eve", "31", "W"]]; 
+2

「集合」不一定是有序的。你可能想使用'List'來代替。 – Vatev 2012-07-28 20:47:26

回答

3

使用API​​ java.util.Collections.sort(List list, Comparator c)指定一個比較,和你想實現它(一個用於名字,另一個年齡)

而且,不是使用String[]{name, age, gender}作爲元素,而是創建具有這些變量作爲成員的類Person。我可能會將你希望這個類中還有兩個比較:

public static final Comparator<Person> AGE_COMPARATOR = new Comparator<Person>() { 
    @Override 
    public int compare(Person p1, Person p2) { 
     // implement 
    } 
}; 

現在,你可以簡單地調用

Collections.sort(map.get(key), Person.AGE_COMPARATOR); 

假設你使用List接口,而不是Collection接口爲@Vatev建議:

Map<String, List<Person>> map = new HashMap<String, List<Person>>(); 
5

您的代碼在我看來就像開發人員在動態語言(如Ruby)中編寫的經驗。你可能會發現這不是你使用Java的最佳途徑。你應該用你的String[]建立一個包含這些字符串作爲屬性的適當對象。

此外,我認爲你的問題的地圖部分是不相關的—你實際上處理的對象的集合,你需要按其中一個屬性排序。你碰巧在地圖上有幾個這樣的集合不影響解決方案。

排序本身是由@Havard Geithus已經建議你完成的。

相關問題