java中stream.sorted()的自然排序依赖元素实现comparable接口并调用compareto()方法,要求元素非null且类型支持比较,否则抛出classcastexception或nullpointerexception。

Java 中 Stream.sorted() 实现自然排序,本质是利用元素自身实现的 Comparable 接口,调用其 compareTo() 方法完成比较。
自然排序的前提:元素必须可比较
只有实现了 Comparable 接口的类(如 String、Integer、LocalDate 等),才能直接使用无参的 sorted()。否则会编译报错或运行时抛 ClassCastException。
-
String按字典序升序 -
Integer按数值大小升序 - 自定义类需显式实现
Comparable,否则不能用无参sorted()
基本用法:无参 sorted() 就是自然排序
对已实现 Comparable 的集合流调用 sorted() 即可:
List<string> words = Arrays.asList("banana", "apple", "cherry");
List<string> sorted = words.stream().sorted().collect(Collectors.toList());
// 结果:["apple", "banana", "cherry"]</string></string>
注意:sorted() 返回新流,原集合不变;它是一个中间操作,需配合终止操作(如 collect)才真正执行。
自定义类的自然排序:实现 Comparable
若要让自定义对象支持自然排序,需在类中实现 Comparable<t></t> 并重写 compareTo():
public class Person implements Comparable<person> {
private String name;
private int age;
public int compareTo(Person other) {
return this.name.compareTo(other.name); // 按 name 自然排序
}
}</person>
之后即可直接使用:
List<person> people = ...; people.stream().sorted().collect(Collectors.toList());</person>
注意点:null 值会引发异常
自然排序不处理 null。如果流中含 null,调用 sorted() 会抛 NullPointerException。
- 提前过滤:
stream.filter(Objects::nonNull).sorted() - 或改用带
Comparator的重载版本,如Comparator.nullsLast(Comparator.naturalOrder())
Comparable 实现。Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











