2013-02-11 70 views
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。如何在java列表中对列表中的地图进行排序

现在我想根据地图中的ids进行排序,我使用list的迭代进行排序,并将map的第一个id保留为checker,并与next进行比较,如果有其他更好的方法比使用内置方法methods.?请给你的ideas.am使用泡沫排序现在。

+0

使用'Collections.sort' – 2013-02-11 04:48:56

+0

@RohitJain感谢答复,但在此基础上地图的对象也将被分拣ID或地图的价值? – sunleo 2013-02-11 04:50:43

+0

搜索'id'键,并获得它的价值。 – 2013-02-11 04:52:47

回答

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

完美的解决方案谢谢它的工作原理......... – sunleo 2013-02-11 05:03:25

0

我会使用,而不是PriorityQueue

为一个包装为您的清单。通过在创建时向构造函数提供Comparator,可以向您保证,在每次将新元素插入列表后,您的列表将保持排序。

1

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

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