用java按照年龄比较Comparable 的Person类和 按照id比较的Comparator比较器 ,用Arrays排序函数,写出具体代码
时间: 2024-11-30 14:22:50 浏览: 4
对比Java中的Comparable排序接口和Comparator比较器接口
在Java中,如果想要同时按照年龄和ID对Person类的对象进行排序,你可以创建两个Comparator,分别用于处理年龄和ID的比较。然后将这两个Comparator组合在一起,通过`Comparator.comparing()`方法来定义复合排序规则。以下是具体的代码示例:
首先,假设我们有一个Person类:
```java
import java.util.Comparator;
public class Person implements Comparable<Person> {
private int id;
private int age;
// 构造函数、getter和setter省略
@Override
public int compareTo(Person other) {
return Integer.compare(this.age, other.age); // 按年龄排序
}
}
```
接下来,我们定义两个Comparator,一个是按年龄排序,另一个是按ID排序:
```java
import java.util.Comparator;
class AgeComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return Integer.compare(p1.getAge(), p2.getAge());
}
}
class IdComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return Integer.compare(p1.getId(), p2.getId());
}
}
```
现在我们可以组合这两个Comparator,并使用Arrays.sort()函数进行排序:
```java
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
List<Person> personList = ...; // 假设这是你要排序的人列表
// 创建复合比较器
Comparator<Person> combinedComparator = Comparator.comparingInt(person -> person.getAge())
.thenComparingInt(person -> person.getId());
// 对personList进行排序
Arrays.sort(personList, combinedComparator);
for (Person person : personList) {
System.out.println("ID: " + person.getId() + ", Age: " + person.getAge());
}
}
}
```
在这个例子中,首先会按照年龄升序排列,如果年龄相同则按照ID升序排列。
阅读全文