Comparator 排序在 Java 中是一个非常常见的操作,它允许我们自定义对象的排序方式。以下是一些常见的 Comparator 排序用法:
对于实现了 Comparable 接口的对象,可以直接使用 Collections.sort() 或 Arrays.sort() 方法进行排序。
List<String> list = Arrays.asList("apple", "banana", "cherry");
Collections.sort(list); // 默认按字母顺序排序
当需要按照特定规则排序时,可以创建一个 Comparator 实例。
List<String> list = Arrays.asList("apple", "banana", "cherry");
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return Integer.compare(s1.length(), s2.length());
}
});
List<Integer> list = Arrays.asList(5, 2, 9, 1);
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer i1, Integer i2) {
return Integer.compare(i1, i2);
}
});
假设有一个 Person 类,包含 name 和 age 属性。
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 35)
);
// 按年龄排序
Collections.sort(people, new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
return Integer.compare(p1.age, p2.age);
}
});
Java 8 引入了 Lambda 表达式,可以简化比较器的编写。
List<String> list = Arrays.asList("apple", "banana", "cherry");
list.sort((s1, s2) -> Integer.compare(s1.length(), s2.length()));
List<Integer> list = Arrays.asList(5, 2, 9, 1);
list.sort((i1, i2) -> Integer.compare(i1, i2));
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 35)
);
// 按年龄排序
people.sort((p1, p2) -> Integer.compare(p1.age, p2.age));
有时需要按照多个条件进行排序,可以先比较主要条件,如果相等再比较次要条件。
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 30)
);
// 先按年龄排序,年龄相同则按名字排序
people.sort((p1, p2) -> {
int ageCompare = Integer.compare(p1.age, p2.age);
if (ageCompare != 0) {
return ageCompare;
}
return p1.name.compareTo(p2.name);
});
Comparator.comparing() 和 thenComparing()Java 8 还提供了 Comparator.comparing() 和 thenComparing() 方法,可以更简洁地创建比较器。
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 30)
);
// 先按年龄排序,年龄相同则按名字排序
people.sort(Comparator.comparing(Person::getAge).thenComparing(Person::getName));
这些是 Comparator 排序的一些常见用法,可以根据具体需求选择合适的方法进行排序。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。