2011-08-23 72 views
1

我有地圖的列表如下排序列表

[[AdGenres-B:鍵:[177,184],MusicalStyles-B:鍵:[30],SONGTITLE藝術家姓名:[LinkinPark],MusicVideoRating:[TV-14],MusicalStyles-b:價值:[Rock],PlayId:[1367],AdGenres-b:價值:[Rock 音樂視頻提供者:[Warner Music Group], AssetId:[91744]],

[[AdGenres-b:key:[177,184],MusicalStyles-b:key:[30 ],歌曲標題:[我做了什麼 ],藝術家姓名:[李音樂視頻提供者:[Warner nkin Park],MusicVideoRating:[TV-14], MusicalStyles-b:value:[Rock],PlayId:[1360],AdGenres-b:value:[Rock - Rock,Rock - Alternative]音樂組], 由assetid:[91740]

我想通過PLAYID升序地圖進行排序,然後排序地圖存儲在列表中。 我該如何做到這一點?

+2

*我想排序地圖*,你的意思是「排序*列表*」,對不對? – aioobe

回答

3

根據map.get("PlayId")實施您自己的Comparator<Map<Key, Value>>

例子:

List<Map<String, String>> songs = new ArrayList<Map<String, String>>(); 

songs.add(new HashMap<String, String>() {{ 
    put("PlayId", "id3"); 
    put("Song Title", "some title"); 
}}); 

songs.add(new HashMap<String, String>() {{ 
    put("PlayId", "id5"); 
    put("Song Title", "some title"); 
}}); 

songs.add(new HashMap<String, String>() {{ 
    put("PlayId", "id2"); 
    put("Song Title", "some title"); 
}}); 

Collections.sort(songs, new Comparator<Map<String, String>>() { 
    @Override 
    public int compare(Map<String, String> o1, Map<String, String> o2) { 
     return o1.get("PlayId").compareTo(o2.get("PlayId")); 
    } 
}); 
0

需要自定義比較什麼。使用MyMapComparator實例

class MyMapComparator { 
    public int compare(Map m1, Map m2) { 
     //get play id from both maps here and compare them 
     return playId1 - playId2; 
    } 
    } 

然後簡單排序列表:

創建一個實現比較的類。

Collections.sort(listTobeSorted, new MyMapComparator());