目录
使用Comparator链式调用
- Comparator.comparing():使用
Comparator.comparing()
方法创建基于主要字段的Comparator。 - thenComparing():使用
thenComparing()
方法添加次要排序规则。 - Collections.sort():调用
Collections.sort()
方法并传入Comparator链。
示例代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class User {
String name;
Integer age;
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
// 省略getter和setter方法
}
public class MultiFieldSort {
public static void main(String[] args) {
List<User> users = new ArrayList<>();
users.add(new User("Alice", 30));
users.add(new User("Bob", 25));
users.add(new User("Alice", 22));
users.add(new User("David", 30));
users.add(new User("David", 2));
users.add(new User("David", 10));
// 使用Comparator链式调用进行排序
Collections.sort(users, Comparator
.comparing(User::getName)
.thenComparingInt(User::getAge));
// 也可以直接用List的sort
//users.sort(Comparator
// .comparing(User::getName)
// .thenComparingInt(User::getAge));
// 输出排序结果
users.forEach(user -> System.out.println("Name: " + user.getName() + ", Age: " + user.getAge()));
}
}
在这个示例中,我们使用了Comparator.comparing()
方法来创建一个基于用户姓名的Comparator,然后通过thenComparingInt()
方法添加了一个基于用户年龄的排序规则。这样,我们就创建了一个排序规则链,它首先按照姓名排序,如果姓名相同,则按照年龄排序。
这种方式的代码更加简洁和现代,利用了Java 8引入的lambda表达式和方法引用,使得代码更加易于阅读和维护。此外,它也避免了创建匿名内部类的需要。