重写Collections.sort方法,自定义排序

原创  郑建华   2020-03-13   845人阅读  0 条评论

在编写程序的过程中,我们经常会遇到需要排序的场景,集合排序

对于一些简单的类型比如String,Integer 可以直接使用Collections.sort()方式进行排序

字符串会按照首字母进行排序,数字则会直接按照大小排序

那如果需要对复杂对象进行排序,那该如何处理呢?

如果想要使用collections.sort()方式进行排序,则需要集合中的元素实现comparable接口,并且定义规则,上述的String,Integer可以排序,是因为他们已经实现了comparable接口。


接下来,对一个以Map对象为元素的集合进行排序,Map对象中有日期字段,假定该日期的key值为date,如何实现排序功能呢?

public static void main(String[] args) {

	    List<Map<String,Object>> maxList=new ArrayList<Map<String,Object>>();
	    Map<String,Object> map1=new HashMap<String,Object>();
	    map1.put("id",1);
	    map1.put("date","2020-03-13");
	    maxList.add(map1);

	    Map<String,Object> map2=new HashMap<String,Object>();
	    map2.put("id",2);
	    map2.put("date","2020-03-12");
	    maxList.add(map2);

	    System.out.println(maxList);
	    
	    Collections.sort(maxList, new Comparator<Map<String, Object>>() {
			@Override
			public int compare(Map<String, Object> o1,Map<String, Object> o2) {
			    return dateCompare(String.valueOf(o1.get("date")),String.valueOf(o2.get("date")));
			}
	    });

	    System.out.println(maxList);
	}
	   /**
	     * 比较时间大小
	     * @param date1
	     * @param date2
	     * @return  date1>date1 返回1 相等0,小于返回-1
	     */
	    public static int dateCompare(String date1,String date2) {
			DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
			int flag = 0;
			try {
				Date d1 = df.parse(date1);
				Date d2 = df.parse(date2);
				if(d1.getTime() > d2.getTime()){
					flag = 1;
				}else if(d1.getTime() < d2.getTime()){
					flag = -1;
				}else{
					flag = 0;
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			return flag;
	   }

第一个是排序前集合

第二个是排序后集合

image.png

本文地址:https://www.zjh336.cn/?id=287
版权声明:本文为原创文章,版权归 郑建华 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?