我在排序方面遇到了一些问题。我有一个 Person 类,其中包含两个参数:年龄和出生时间:
public class Person {
int age;
private final Instant birthTime;
我想编写排序逻辑,按年数对人员列表进行排序,如果年数相同,则按出生日期排序。我写了这样的逻辑:
return people.stream().sorted((p1, p2) -> {
if (p1.getAge() != p2.getAge()) {
return Integer.compare(p2.getAge(), p1.getAge());
} else {
return p2.birthTime().compareTo(p1.birthTime());
}
}).collect(Collectors.toList());
但我认为这不是一个正确的实现,我想知道如果两个人同时出生会发生什么。谁能提出更好的解决方案吗?
假设您正在为 Person 类使用
record
和 List<Person>
,您可以这样做。
流式传输不是必需的,因为 List 接口具有排序方法。但你的做法并没有什么问题。您使用的排序方法是稳定排序,因此如果所有测试都相等,则 stet 下的两个人将保持相同的相对顺序。
record Person(int age, Instant birthTime) {
}
List<Person> people = new ArrayList<>();
Comparator<Person> comp = Comparator.comparing(Person::age)
.thenComparing(Person::birthTime);
people.sort(comp);