在平时工作中我们经常会需要用到排序,尤其是集合框架,虽然说本身自带排序的功能,但有时也会遇到自带的排序功能无法满足我们业务的需求
下面我们先假设一个业务场景,现在我们在数据库中查询到一个list集合里面存放的是一个类,我们要按照主键的大小进行排序,但主键是String类型的数字并且长度不一样 例如 “1”,“11”,“13”,“7”,“6”,如果我们直接调用sort方法会发现根本没法按照我们的预想排序,这时我们可以重写Comparator方法实现排序
public static void main(String[] args) {
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
Map<String,Object> map1 = new HashMap<String,Object>();map1.put("sort", "1");
Map<String,Object> map2 = new HashMap<String,Object>();map2.put("sort", "11");
Map<String,Object> map3 = new HashMap<String,Object>();map3.put("sort", "13");
Map<String,Object> map4 = new HashMap<String,Object>();map4.put("sort", "7");
Map<String,Object> map5 = new HashMap<String,Object>();map5.put("sort", "6");
list.add(map1);list.add(map2);list.add(map3);list.add(map4);list.add(map5);
System.out.print("排序前的list顺序:");
for(int i=0 ;i<list.size() ;i++) {
if(i < list.size()-1) {
System.out.print(list.get(i).get("sort")+"-->");
}else {
System.out.println(list.get(i).get("sort"));
}
}
System.out.println("---------------------------------------------");
//这里是方法
**list.sort(new Comparator<Map<String,Object>>(){
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
return Integer.parseInt(o1.get("sort").toString()) > Integer.parseInt(o2.get("sort").toString()) ? 1:-1;
}
});**
System.out.print("排序后的list顺序:");
for(int i=0 ;i<list.size() ;i++) {
if(i < list.size()-1) {
System.out.print(list.get(i).get("sort")+"-->");
}else {
System.out.println(list.get(i).get("sort"));
}
}
}
结果:
这里重写Comparator方法,将字符串转为数字然后比较大小,因为compare方法返回值时int所以用三元运算符,o1>o2 ? 1:-1 ,这样就可以完美实现比较了。