2011-08-23 119 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());