2013-03-26 107 views
1

我有maps列表,我已經由一個類型排序,但現在我想進一步排序,列出進一步梳理已排序列表

原始排序

Collections.sort(list, new Comparator<Map<String,Object>>(){ 

    @Override 
    public int compare(Map<String, Object> m1,Map<String, Object> m2) { 

     return m1.get("type").toString().compareTo(m2.get("type").toString()); //type is a 1 or 0 
    }   
}); 

現在我想做的是保持這個順序,但我想進一步排序人姓氏的名單。我將不得不把它分成兩個列表,一個是0類型的列表,另一個是1類型的列表,然後把這些列表加在一起?

基本上我想複製SQL排序,我會做type ASC, lastName ASC並給我一個按類型排序的列表,按照姓氏排序的類型。

回答

4

你可以這樣做:

int compareType = m1.get("type").toString().compareTo(m2.get("type").toString()); 
if(compareType != 0) { 
    return compareType; 
} 
return m1.get("name").toString().compareTo(m2.get("name").toString()); 

如果你在很多關鍵點排序,這將是清潔:

for(String key : new String[] { "type", "name" }) { 
    int compare = m1.get(key).toString().compareTo(m2.get(key).toString()); 
    if(compare != 0) { 
     return compare; 
    } 
} 
return 0;