Collections.sort(List<T> list,Comparator<? super T> c);方法
例如有如下集合:
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
集合内的值为:
{name=zs, age=23},
{name=ls, age=25},
{name=ww, age=22},
{name=zl, age=37},
{name=qq, age=18}
我们要根据age的值给集合中的元素排序
使用Collections.sort(List<T> list,Comparator<? super T> c);方法
Collections.sort(list, new Comparator<Map<String, Object>>()
{
@Override
public int compare(Map<String, Object> o1, Map<String, Object> o2)
{
return 0;
}
});
Comparator接口实现compare方法
经过踩坑,知道了compare方法两个参数代表的意义
o1代表后一个元素,o2代表前一个元素
例如上述list集合,当方法进行第一次比较时,o1是{name=ls, age=25},o2是{name=zs, age=23}
compare方法的返回值是0、正整数、负整数
当返回0或正整数时,元素排序不变
当返回负整数时,元素调换位置
例如我们要将上述list集合按照升序排列,代码如下:
Collections.sort(list, new Comparator<Map<String, Object>>()
{
@Override
public int compare(Map<String, Object> o1, Map<String, Object> o2)
{
// o1代表着后一个元素,o2代表前一个元素
int ageF = (int)o1.get("age");
int ageB = (int)o2.get("age");
// 容易理解的代码
if (ageF >= ageB)
{// 如果后一个元素的值大于或等于前一个元素的值,元素位置不变
return 1;
}
else
{// 如果后一个元素的值小于前一个元素的值,代码位置调换
return -1;
}
// 上述代码可简化为:
// return ageF - ageB;
}
});
遍历执行后的集合:
list.forEach(map->System.out.println(map.get("name").toString() + ":" + map.get("age")));得到结果: