使用Comparator.comparing()可实现List按属性排序,如按age升序:people.sort(Comparator.comparing(Person::getAge));支持多属性排序thenComparing()、降序reversed(),或通过Stream生成新列表避免修改原数据。

在Java中,可以根据对象的属性对List进行排序,常用的方式是使用Collections.sort()或List自带的sort()7a8b6c3e>方法结合Comparator。从Java 8开始,推荐使用Stream API或Comparator的便捷方法来实现,代码更简洁清晰。
1. 使用 Comparator.comparing()(Java 8+)
假设有一个Person类,包含name和age属性:
class Person {
private String name;
private int age;
// 构造函数
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// getter方法
public String getName() { return name; }
public int getAge() { return age; }
@Override
public String toString() {
return name + "(" + age + ")";
}
}
要根据age对List排序:
Listpeople = new ArrayList<>(); people.add(new Person("Alice", 30)); people.add(new Person("Bob", 25)); people.add(new Person("Charlie", 35)); // 按年龄升序排序 people.sort(Comparator.comparing(Person::getAge)); System.out.println(people); // 输出: [Bob(25), Alice(30), Charlie(35)]
2. 按多个属性排序
如果需要先按age排序,再按name排序:
立即学习“Java免费学习笔记(深入)”;
people.sort(Comparator.comparing(Person::getAge)
.thenComparing(Person::getName));
这样会先按年龄升序,年龄相同时按姓名字母顺序排列。
3. 降序排序
使用reversed()方法实现降序:
// 按年龄降序 people.sort(Comparator.comparing(Person::getAge).reversed());
4. 使用 Stream 排序(不修改原列表)
如果不想改变原List,可以使用Stream生成新列表:
Listsorted = people.stream() .sorted(Comparator.comparing(Person::getName)) .collect(Collectors.toList());
这种方式适合需要保留原始顺序的场景。
基本上就这些常见用法。使用Comparator配合方法引用,代码简洁且可读性强。










