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