在 Java 里,Comparator 的链式调用主要靠 Java 8 引入的方法,非常常见、也非常好用。
Comparator 提供了两个关键方法用于链式调用:
thenComparing当前一个比较规则相等时,再按下一个规则比较
Comparator<T> thenComparing(Comparator<? super T> other)
class User {
String name;
int age;
double salary;
// getter / constructor
}
Comparator<User> comparator =
Comparator.comparing(User::getAge)
.thenComparing(User::getSalary);
✅ 含义:
age 升序age 相同,再按 salary 升序Comparator<User> comparator =
Comparator.comparing(User::getAge)
.thenComparing(User::getSalary)
.thenComparing(User::getName);
Comparator<User> comparator =
Comparator.comparing(User::getAge, Comparator.reverseOrder());
Comparator<User> comparator =
Comparator.comparing(User::getAge) // 升序
.thenComparing(User::getSalary, Comparator.reverseOrder()); // 降序
Comparator<User> comparator =
Comparator.comparing(
User::getName,
Comparator.nullsLast(String::compareTo)
);
Comparator<User> comparator =
Comparator.comparing(
User::getName,
Comparator.nullsLast(String::compareTo)
).thenComparing(
User::getAge
);
List<User> users = new ArrayList<>();
users.sort(
Comparator.comparing(User::getAge)
.thenComparing(User::getSalary, Comparator.reverseOrder())
.thenComparing(User::getName)
);
先 comparing,再 thenComparing,想降序就 reverseOrder,想防 null 就 nullsLast
如果你愿意,我也可以帮你:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。