0
 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 作为检查器,并与下一个进行比较,如果有比使用内置方法更好的方法。请给出你的想法。我现在为此使用冒泡排序。

4

3 回答 3

4

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

这个想法是,如果您有自然排序的对象(任何扩展 Comparable 的对象),您可以只要求排序,例如

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"));}
    })
于 2013-02-11T04:53:28.020 回答
1

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

list.sort(Comparator.comparing((Map<String,String> mp) -> mp.get("Id")));
于 2017-11-22T14:25:40.700 回答
0

我会改用PriorityQueue

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

于 2013-02-11T12:53:12.113 回答