如何在java中对List内的map进行排序

时间:2013-02-11 04:43:37

标签: java collections

 List<Map<String,String>> consolidErr = new LinkedList<Map<String,String>>();

 Map m1= new HashMap<String,String>();
 m1.put("id","1");
 m1.put("value","value1");

 Map m2= new HashMap<String,String>();
 m2.put("id","2");
 m2.put("value","value2");

 Map m3= new HashMap<String,String>();
 m3.put("id","3");
 m3.put("value","value3");

add all m1,m3 and m2 in list

然后根据地图中的ID对地图进行排序现在我希望列表中的地图为m1,m2和m3。

现在我想根据地图中的ID进行排序,我使用列表的迭代进行排序,并将地图的第一个id保留为检查器并与下一个进行比较,如果有任何其他更好的方法,则使用内置方法。现在请给你的想法。现在使用冒泡排序。

3 个答案:

答案 0 :(得分:4)

在java中执行此操作的最简单方法(或至少使用最少的混乱)是使用自定义比较器。

我们的想法是,如果您的对象具有自然排序(扩展可比较的任何内容),您可以直接询问排序,例如:

Collections.sort(List<Integer> .. 

否则你可以传入一个比较器来描述你想要对象的比较,以及你想要的任何自定义逻辑,例如: (粗略 - 这是我的头顶,没有错误检查,但应该足以让你的想法) -

List<Map<String,String>> consolidErr = ...
enter code here
Collections.sort(consolidErr, new Comparator<Map<String,String>>(){
     public int compare(Map<String,String> a, Map<String,String> b){ 
        return a.get("id").compareTo(b.get("id"));}
    })

答案 1 :(得分:1)

在Java 8中,我们可以在一行中对list maps进行排序。

list.sort(Comparator.comparing((Map<String,String> mp) -> mp.get("Id")));

答案 2 :(得分:0)

我会使用PriorityQueue

作为列表的包装器。通过在创建构造函数时将Comparator提供给构造函数,可以确保在每次向列表中插入新元素后,列表将保持排序。