javasort自定义排序规则
时间: 2023-10-12 14:20:20 浏览: 109
java Lucene 中自定义排序的实现
在 Java 中,可以通过实现 `Comparator` 接口来自定义排序规则。 `Comparator` 接口有一个 `compare()` 方法,可以在其中编写自定义的比较逻辑。
假设有一个 `Person` 类,其中包含 `name` 和 `age` 两个字段,现在要按照年龄从小到大排序,如果年龄相同,则按照姓名字典序排序。代码如下:
```java
import java.util.Comparator;
public class Person {
private String name;
private int age;
// 构造方法和 getter/setter 略
// 自定义比较器
public static Comparator<Person> ageNameComparator = new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
if (p1.getAge() < p2.getAge()) {
return -1;
} else if (p1.getAge() > p2.getAge()) {
return 1;
} else {
return p1.getName().compareTo(p2.getName());
}
}
};
}
```
在上面的代码中,我们定义了一个 `ageNameComparator` 比较器,它可以按照年龄从小到大排序,如果年龄相同,则按照姓名字典序排序。在 `compare()` 方法中,我们首先比较两个 `Person` 对象的年龄,如果年龄不同,就直接返回比较结果;如果年龄相同,就比较两个 `Person` 对象的姓名。
使用自定义的比较器进行排序,可以通过调用 `Collections.sort()` 方法,并传入自定义比较器作为参数,示例代码如下:
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
// 添加 Person 对象到 personList 中,省略...
// 使用自定义比较器进行排序
Collections.sort(personList, Person.ageNameComparator);
// 输出排序结果
for (Person person : personList) {
System.out.println(person.getName() + ", " + person.getAge());
}
}
}
```
在上面的代码中,我们将 `Person` 对象添加到 `personList` 中,然后使用 `Collections.sort()` 方法对其进行排序,排序规则是按照 `Person.ageNameComparator` 自定义比较器进行排序。最后,打印排序结果。
阅读全文