可以的,Java 的 Comparator 不仅能排序基本类型(通过包装类),也能直接排序对象。Comparator 本身就是为「对象之间的比较规则」设计的。
Comparator<T> 是一个函数式接口,只有一个核心方法:
int compare(T o1, T o2);
class Student {
String name;
int age;
Student(String name, int age) {
this.name = name;
this.age = age;
}
}
List<Student> list = new ArrayList<>();
list.add(new Student("Tom", 20));
list.add(new Student("Jerry", 18));
list.sort(Comparator.comparingInt(s -> s.age));
或:
Collections.sort(list, (s1, s2) -> s1.age - s2.age);
list.sort(Comparator.comparing(s -> s.name));
list.sort(
Comparator
.comparingInt((Student s) -> s.age)
.thenComparing(s -> s.name)
);
list.sort(Comparator.comparingInt(Student::getAge).reversed());
| 对比 | Comparator | Comparable |
|---|---|---|
| 所在位置 | 外部定义 | 对象内部实现 |
| 灵活性 | ✅ 多种排序规则 | ❌ 只能一种 |
| 使用场景 | 推荐 | 自然排序 |
✅ 能排对象吗? → 能
✅ 能排 null 吗? → 可以,但要处理:
Comparator.nullsLast(Comparator.comparing(Student::getName));
如果你有:
可以直接把代码贴出来,我帮你写。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。