在Java中,Comparator
接口用于比較兩個對象的順序,常用于集合的排序。自Java 8開始,Comparator
接口得到了增強,提供了許多默認方法,使得排序邏輯更加靈活和強大。下面將通過幾個實例來展示Comparator
的用法。
示例1:基本使用
假設我們有一個Person
類,包含name
和age
兩個屬性,我們想按照年齡對Person
對象進行排序:
Java
深色版本
1import java.util.ArrayList;
2import java.util.Collections;
3import java.util.Comparator;
4import java.util.List;
5
6class Person {
7 String name;
8 int age;
9
10 public Person(String name, int age) {
11 this.name = name;
12 this.age = age;
13 }
14
15 @Override
16 public String toString() {
17 return "Person{" +
18 "name='" + name + '\'' +
19 ", age=" + age +
20 '}';
21 }
22}
23
24public class ComparatorExample {
25 public static void main(String[] args) {
26 List<Person> people = new ArrayList<>();
27 people.add(new Person("Alice", 30));
28 people.add(new Person("Bob", 25));
29 people.add(new Person("Charlie", 35));
30
31 // 按照年齡升序排序
32 Collections.sort(people, new Comparator<Person>() {
33 @Override
34 public int compare(Person o1, Person o2) {
35 return Integer.compare(o1.age, o2.age);
36 }
37 });
38
39 // 輸出排序后的結果
40 for (Person person : people) {
41 System.out.println(person);
42 }
43 }
44}
示例2:使用lambda表達式
在Java 8中,可以使用lambda表達式簡化Comparator
的實現:
Java
深色版本
1import java.util.ArrayList;
2import java.util.Collections;
3import java.util.Comparator;
4import java.util.List;
5
6public class ComparatorExample {
7 public static void main(String[] args) {
8 List<Person> people = new ArrayList<>();
9 people.add(new Person("Alice", 30));
10 people.add(new Person("Bob", 25));
11 people.add(new Person("Charlie", 35));
12
13 // 使用lambda表達式進行排序
14 Collections.sort(people, (p1, p2) -> Integer.compare(p1.age, p2.age));
15
16 // 輸出排序后的結果
17 people.forEach(System.out::println);
18 }
19}
示例3:鏈式調用
Java 8的Comparator
提供了thenComparing
方法,可以進行鏈式調用,實現多重排序:
Java
深色版本
1import java.util.ArrayList;
2import java.util.Collections;
3import java.util.Comparator;
4import java.util.List;
5
6public class ComparatorExample {
7 public static void main(String[] args) {
8 List<Person> people = new ArrayList<>();
9 people.add(new Person("Alice", 30));
10 people.add(new Person("Bob", 30));
11 people.add(new Person("Charlie", 25));
12
13 // 先按年齡排序,年齡相同時按名字排序
14 Collections.sort(people, Comparator.comparingInt(Person::getAge)
15 .thenComparing(Comparator.comparing(Person::getName)));
16
17 // 輸出排序后的結果
18 people.forEach(System.out::println);
19 }
20}
在上述示例中,Comparator.comparingInt
和Comparator.comparing
方法用于創建Comparator
實例,它們可以分別用于基本類型和對象類型的比較。thenComparing
方法用于鏈接多個比較器,實現復合排序。
以上就是Comparator
在Java中的基本用法,它極大地簡化了集合排序的代碼實現,使得排序邏輯更加清晰和易于維護。