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")));得到結果: