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保留为检查器并与下一个进行比较,如果有任何其他更好的方法,则使用内置方法。现在请给你的想法。现在使用冒泡排序。
答案 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提供给构造函数,可以确保在每次向列表中插入新元素后,列表将保持排序。