Java多条件排序核心是Comparator链式调用thenComparing(),支持字段排序、null安全(nullsFirst/nullsLast)、逆序(reverseOrder)及Lambda自定义逻辑,适用于List.sort()和Stream.sorted()。

Java中实现多条件排序,核心是利用Comparator接口的链式比较能力,通过thenComparing()方法逐级指定优先级。不需要手写冗长的if-else逻辑,现代写法简洁且可读性强。
对一个实体类(如Student)按“年级升序 → 班级升序 → 分数降序”排序:
students.sort(Comparator.comparing(Student::getGrade)
.thenComparing(Student::getClazz)
.thenComparing(Student::getScore, Comparator.reverseOrder()));
说明:
comparing()指定第一排序字段和自然顺序(升序)thenComparing()追加第二、第三条件,支持方法引用或自定义Comparator
reverseOrder()用于降序;也可用reversed()反转前一个比较器字段可能为null时,直接调用getXXX()会抛异常。应使用comparing()的重载版本指定nullsFirst()或nullsLast():
立即学习“Java免费学习笔记(深入)”;
Comparator.comparing(Student::getName, Comparator.nullsLast(String::compareTo))
.thenComparing(Student::getAge, Comparator.nullsFirst(Integer::compareTo))
常见组合:
nullsFirst(Comparator.naturalOrder()):null排最前,其余升序nullsLast(Comparator.reverseOrder()):null排最后,其余降序当排序依据不是简单getter,而是计算值或业务规则时,可传入Lambda表达式:
students.sort(Comparator.comparing(
s -> s.getScore() >= 90 ? "A" :
s.getScore() >= 80 ? "B" : "C"
).thenComparing(Student::getScore));
注意点:
无论用List.sort()还是Stream.sorted(),Comparator写法完全一致:
// 集合原地排序
list.sort(comparator);
// 流式处理,返回新列表
List<Student> sorted = list.stream()
.sorted(comparator)
.collect(Collectors.toList());
推荐场景:
sort()更省内存Stream.sorted()
基本上就这些。多条件排序不复杂但容易忽略null和逆序细节,用好thenComparing和nullsFirst/Last就能覆盖绝大多数业务场景。
以上就是在Java中如何实现多条件排序_Java复杂排序写法说明的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号