java中的list自定义排序以及倒排序的实现

涉及知识点:如标题

大神可以一笑而过~~~


今天进行数据处理,把处理过的数据存放在List()中,list中的元素为HashMap<String,Object>

其中元素map中有三个键值对id,name,num.

主要处理每种元素出现的次数,后面的num就是出现的次数。


需求是想要把出现次数较多的数据排在前面。

需要自己写一个比较类,实现java.util.Comparator 接口。

使用Collections.sort(list, comparator); 来进行比较。


上代码:


public static void main(String[] args) {
		List<HashMap<String, Object>> list = new ArrayList<HashMap<String,Object>>();
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put("name", "gjk");
		map.put("id", "1");
		map.put("num", 45);
		list.add(map);
		
		HashMap<String, Object> map2 = new HashMap<String, Object>();
		map2.put("name", "gjk2");
		map2.put("id", "2");
		map2.put("num", 60);
		list.add(map2);
		
		HashMap<String, Object> map3 = new HashMap<String, Object>();
		map3.put("name", "gjk3");
		map3.put("id", "3");
		map3.put("num", 30);
		list.add(map3);

//		 打印出list中的值
//		printList(list);
		
		ComparatorHashMap comparator=new ComparatorHashMap();
		Collections.sort(list, comparator);
		System.out.println("after@@@@@@@@@");
		// 打印出list中的值
//		printList(list);
	}

其中比较类如下图,可以根据自己的业务需求进行更改:


public class ComparatorHashMap implements Comparator{

	 public int compare(Object arg0, Object arg1) {
		 
		  HashMap<String, Object> map = (HashMap<String, Object>)arg0;
		  HashMap<String, Object> map2 = (HashMap<String, Object>)arg1;

		   //首先比较出现次数,如果相同,则比较名字
		  Integer num = Integer.parseInt(map.get("num").toString());
		  Integer num2 = Integer.parseInt(map2.get("num").toString());
		  int flag = num2.compareTo(num);
		  if(flag == 0){
			  return (map2.get("name").toString()).compareTo(map.get("name").toString());
		  }else{
			  return flag;
		  }  
	 }
}


排序涉及到正排序和倒排序,这个需要自己在自己的实现类里面来处理。如果是正排序就比较第一个值和第二个值;如果是倒排序,那么比较第二个值和第一个值,两个互相颠倒即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值