基于值对地图列表进行排序

时间:2011-08-23 20:15:15

标签: java

我有一张地图清单如下

  

[[AdGenres-b:key:[177,184],MusicalStyles-b:key:[30],SongTitle:[What   我有   完成],ARTISTNAME:[联合公园],MusicVideoRating:TV-14],MusicalStyles-B:值:[摇滚],PLAYID:[1367],AdGenres-B:值:[摇滚    - 摇滚,摇滚 - 另类],MusicVideo提供者:[华纳音乐集团],   由assetid:[91744],

     

[[AdGenres-b:key:[177,184],MusicalStyles-b:key:[30],SongTitle:[What   我已经完成了],艺术家名称:[Linkin Park],MusicVideo评分:[TV-14],   MusicalStyles-b:价值:[Rock],PlayId:[1360],AdGenres-b:价值:[Rock -   摇滚,摇滚 - 另类],MusicVideo提供者:[华纳音乐集团],   由assetid:[91740]

我想按升序对PlayId排序地图,然后将排序后的地图存储在列表中。 我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:3)

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

示例:

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"));
    }
});

答案 1 :(得分:0)

您需要什么样的自定义比较器。

创建一个实现Comparator的类:

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

然后只使用MyMapComparator的实例对您的列表进行排序。

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