可以的。Java 的 Comparator 不仅可以比较基本类型对应的包装类,也可以比较任意对象(包括自定义对象)。
Comparator 是什么Comparator 是 Java 中的一个函数式接口(java.util.Comparator<T>),用来定义两个对象之间的比较规则。
public interface Comparator<T> {
int compare(T o1, T o2);
}
o1 < o2o1 == o2o1 > o2class User {
String name;
int age;
User(String name, int age) {
this.name = name;
this.age = age;
}
}
Comparator 比较对象(按 age)import java.util.*;
public class Test {
public static void main(String[] args) {
List<User> users = Arrays.asList(
new User("Tom", 20),
new User("Jack", 18),
new User("Lucy", 25)
);
Comparator<User> byAge = new Comparator<User>() {
@Override
public int compare(User u1, User u2) {
return Integer.compare(u1.age, u2.age);
}
};
users.sort(byAge);
users.forEach(u -> System.out.println(u.name + " " + u.age));
}
}
users.sort((u1, u2) -> Integer.compare(u1.age, u2.age));
Comparator.comparingusers.sort(Comparator.comparing(u -> u.age));
users.sort(
Comparator
.comparing((User u) -> u.age)
.thenComparing(u -> u.name)
);
Comparable 的区别(常见混淆)| 接口 | 说明 |
|---|---|
Comparable<T> |
对象自身定义排序规则(this vs 其他) |
Comparator<T> |
外部定义比较规则,更灵活 |
class User implements Comparable<User> {
public int compareTo(User o) {
return this.age - o.age;
}
}
✅ Comparator 完全可以比较对象
✅ 支持自定义类
✅ 支持多字段、逆序、链式排序
✅ 常用于 sort()、TreeSet、TreeMap、Stream
如果你有具体对象结构或排序需求,我可以直接帮你写 Comparator。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。