在编写程序的过程中,我们经常会遇到需要排序的场景,集合排序
对于一些简单的类型比如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; }
第一个是排序前集合
第二个是排序后集合
还没有评论,来说两句吧...