java8如何排序
排序基础方法
Java 8 提供了多种排序方式,主要通过 Comparator 接口和 Stream API 实现。以下是一些常见场景的排序方法。
对集合进行排序
使用 Collections.sort() 或 List.sort() 方法可以对 List 进行排序。Java 8 引入了 Lambda 表达式,使代码更简洁。
List<String> names = Arrays.asList("John", "Alice", "Bob", "Diana");
// 使用 Collections.sort
Collections.sort(names, (a, b) -> a.compareTo(b));
// 使用 List.sort
names.sort((a, b) -> a.compareTo(b));
// 使用方法引用
names.sort(String::compareTo);
使用 Stream API 排序
通过 Stream.sorted() 方法可以对流中的元素进行排序。
List<String> sortedNames = names.stream()
.sorted()
.collect(Collectors.toList());
// 自定义排序
List<String> customSorted = names.stream()
.sorted((a, b) -> b.compareTo(a)) // 降序
.collect(Collectors.toList());
对对象集合按属性排序
使用 Comparator.comparing() 可以按对象的某个属性排序。
class Person {
private String name;
private int age;
// 构造方法、getter 和 setter 省略
}
List<Person> people = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("John", 20)
);
// 按 name 升序排序
people.sort(Comparator.comparing(Person::getName));
// 按 age 降序排序
people.sort(Comparator.comparing(Person::getAge).reversed());
// 多条件排序
people.sort(Comparator.comparing(Person::getAge).thenComparing(Person::getName));
对数组进行排序
使用 Arrays.sort() 可以对数组进行排序。
String[] namesArray = {"John", "Alice", "Bob", "Diana"};
// 升序排序
Arrays.sort(namesArray);
// 自定义排序(降序)
Arrays.sort(namesArray, (a, b) -> b.compareTo(a));
并行流排序
使用并行流可以提升大数据集的排序性能。
List<String> sortedNamesParallel = names.parallelStream()
.sorted()
.collect(Collectors.toList());
自然排序与自定义排序
Java 8 支持自然排序(Comparable 接口)和自定义排序(Comparator 接口)。

// 自然排序(需实现 Comparable)
class Student implements Comparable<Student> {
private String name;
private int score;
@Override
public int compareTo(Student other) {
return this.score - other.score;
}
}
List<Student> students = ...;
students.sort(); // 使用自然排序
// 自定义排序
students.sort(Comparator.comparing(Student::getName).reversed());
注意事项
- 对于
null值,可以使用Comparator.nullsFirst()或Comparator.nullsLast()处理。 - 排序稳定性:Java 的排序算法是稳定的,相等元素的相对顺序不会改变。
- 性能:对于大数据集,考虑使用并行流或优化比较逻辑。






