在 Java 里,Comparator 的“链式”通常指通过 thenComparing 实现多级排序,或者通过 Comparator.comparing(...).thenComparing(...) 连续拼接条件。
下面按常见用法说明。
List<Person> list = ...;
list.sort(
Comparator
.comparing(Person::getAge) // 第一排序:年龄
.thenComparing(Person::getName) // 第二排序:姓名
);
等价于:
list.sort(
Comparator
.comparing(Person::getAge).reversed() // 年龄降序
.thenComparing(Person::getName) // 姓名升序
);
⚠️ 注意:reversed() 只作用于当前 comparing
list.sort(
Comparator
.comparing(Person::getAge).reversed()
.thenComparing(Person::getName).reversed()
);
thenComparing 的不同形式.thenComparing(Person::getScore)
.thenComparing(p -> p.getScore())
.thenComparing((a, b) -> Integer.compare(a.getScore(), b.getScore()))
Comparator.comparing(
Person::getName,
Comparator.nullsLast(Comparator.naturalOrder())
)
list.sort(
Comparator
.comparing(Person::getAge, Comparator.nullsLast(Comparator.naturalOrder()))
.thenComparing(Person::getName, Comparator.nullsLast(Comparator.naturalOrder()))
);
public static final Comparator<Person> BY_AGE_NAME =
Comparator
.comparing(Person::getAge)
.thenComparing(Person::getName);
list.sort(BY_AGE_NAME);
list.stream()
.sorted(
Comparator
.comparing(Person::getAge)
.thenComparing(Person::getName)
)
.collect(Collectors.toList());
| 需求 | 写法 |
|---|---|
| 多级排序 | comparing().thenComparing() |
| 降序 | .reversed() |
| null 安全 | nullsFirst / nullsLast |
| 复用 | 定义静态 Comparator |
如果你有具体对象结构或排序规则,我可以直接帮你写完整 Comparator。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。