使用Collections.sort(list)可對一個List對象進(jìn)行升序排序,但如果要按某種指定規(guī)則進(jìn)行排序,可使用如下四種方法:
1. 使用list.sort(comparator)方法
List的sort()方法中可以傳入一個自定義Comparator比較器。實現(xiàn)Comparator接口,重寫compare方法來定義排序規(guī)則。
- 如果compare()方法返回負(fù)整數(shù),表示obj1小于obj2;
- 如果compare()方法返回零,表示obj1等于obj2;
- 如果compare()方法返回正整數(shù),表示obj1大于obj2。
List<Integer> list = new ArrayList<>();
list.add(5);
list.add(2);
list.add(8);
// 自定義比較器,按照降序排序
Comparator<Integer> comparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
};
list.sort(comparator);
可進(jìn)一步簡寫為lambda表達(dá)式,編譯器會根據(jù)參數(shù)類型重寫對應(yīng)的接口方法創(chuàng)建匿名類對象
list.sort((o1, o2) -> {
return o2.compareTo(o1);
});
//表達(dá)式的主體只有一行代碼時可繼續(xù)簡寫
list.sort((o1, o2) -> o2.compareTo(o1));
2. 使用Collections.sort(list, comparator)方法
Collections.sort()方法可以傳入一個list和自定義Comparator比較器,根據(jù)比較器規(guī)則對list進(jìn)行排序。
Collections.sort(list, comparator);
//簡寫
Collections.sort(list, (o1, o2) -> o2.compareTo(o1));
3.集合元素實現(xiàn)Comparable接口
使List中的元素實現(xiàn)Comparable接口,重寫compareTo方法來定義元素的比較規(guī)則,然后再用Collections.sort(list)。文章來源:http://www.zghlxwxcb.cn/news/detail-445641.html
class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person other) {
// 根據(jù)年齡進(jìn)行升序排序
return Integer.compare(this.age, other.age);
}
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
list.add(new Person("Alice", 25));
list.add(new Person("Bob", 30));
list.add(new Person("Charlie", 20));
Collections.sort(list);
list.forEach(x -> System.out.println(x.name + x.age));
}
}
4. Comparator多級比較
當(dāng)?shù)谝粋€關(guān)鍵字相等時還需要進(jìn)行后續(xù)關(guān)鍵字的繼續(xù)比較時,就可以用到Comparator接口中的靜態(tài)方法comparing和默認(rèn)方法thenComparing(),它們都接收一個函數(shù)式接口Function的實現(xiàn)對象作為參數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-445641.html
List<List<Integer>> lineList = new ArrayList<>();
//先按照第一個關(guān)鍵字比較,相等則thenComparing第二個關(guān)鍵字
lineList.sort(Comparator.comparing((List<Integer> o) -> o.get(0)).thenComparing(o -> o.get(1)));
到了這里,關(guān)于List按指定規(guī)則排序的四種方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!