MAP集合按需排序

在编程的过程中,有时会遇到需要对MAP集合进行排序的现象,比如像下面这种情况:


List<Map<String,Object>> l = new ArrayList<Map<String,Object>>();
Map<String, Object> ma = new HashMap<String,Object>();
ma.put("num", 22);
ma.put("cc", "cc");
l.add(ma);
ma = new HashMap<String,Object>();
ma.put("num", 33);
ma.put("cc", "dd");
l.add(ma);


现在需要对集合L中的MAP对象按KEY值‘num'的大小进行排序,经查,现有的API中的Collections.sort方法不支持MAP类的集合排序,怎么办呢,自己写个排序类,实现Comparator接口的compare方法即可,简单的CODE如下:

class SortMap implements Comparator{

private String sortName = null;
private String compareType = "int";
public SortMap(String sortName,String compareType){
this.sortName = sortName;
this.compareType = compareType;
}

@Override
public int compare(Object o1, Object o2) {
Map m1 = (Map)o1;
Map m2 = (Map)o2;
if(compareType.equalsIgnoreCase("int")){
Integer ia = (Integer)m1.get(sortName);
Integer ib = (Integer)m2.get(sortName);
return ia.compareTo(ib);
}else{
String ia = (String)m1.get(sortName);
String ib = (String)m2.get(sortName);
return ia.compareTo(ib);
}
}

}


好了,我们再来写个测试类,


public class TestMapSort<T> {

@SuppressWarnings("unchecked")
public void sort(){

List<Map<String,Object>> l = new ArrayList<Map<String,Object>>();
Map<String, Object> ma = new HashMap<String,Object>();
ma.put("num", 22);
ma.put("cc", "cc");
l.add(ma);
ma = new HashMap<String,Object>();
ma.put("num", 33);
ma.put("cc", "dd");
l.add(ma);

ma = new HashMap<String,Object>();
ma.put("num", 11);
ma.put("cc", "aaa");
l.add(ma);

ma = new HashMap<String,Object>();
ma.put("num", 10);
ma.put("cc", "bbbb");
l.add(ma);

SortMap sm = new SortMap("num","int");
Collections.sort(l,sm);
for(Map<String,Object> m : l){
System.out.println("---------each map-----------");
Set<Map.Entry<String, Object>> st = m.entrySet();
for(Entry<String, Object> entry : st){
System.out.print("key: "+entry.getKey() +" ");
System.out.println(entry.getValue());
}
}

}

public static void main(String[] arg){
TestMapSort ts = new TestMapSort();
ts.sort();
}

}



运行结果如下:

---------each map-----------
key: num 10
key: cc bbbb
---------each map-----------
key: num 11
key: cc aaa
---------each map-----------
key: num 22
key: cc cc
---------each map-----------
key: num 33
key: cc dd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值