业务中经常需要对数据做一个排序动作,比如有系统自带的比较函数,Arrays.sort(),对一个基础数据类型做排序,但我们业务中更多的数据类型是封装成一个对象,面向对象进行数据处理。而自己的实体类就需要自己来定义比较器了,用系统自带是无法实现的。
比较器有内部比较器和外部比较器,这里将外部比较器,拓展性更好
一、比较器核心
定义一个比较器类,该类需要实现Comparator<T> 接口,然后类里需要实现抽象方法compare()方法,这里就是定义数据的排序方式,是升序还是降序。
compare()方法的返回值是int类型,这里需要注意返回值分三种 -1,0,1:
// 如果返回负数,认为方法的第一个参数(即对象)应该排在前面
// 如果返回正数,认为第二个参数应该排在前面
// 如果返回0,认为谁放前面无所谓
二、比较器代码
自定义比较器类如下:
package class06;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
public class ShowComparator {
public static class Student {
public String name;
public int id;
public int age;
public Student(String name, int id, int age) {
this.name = name;
this.id = id;
this.age = age;
}
}
// 谁id大,谁放前!
public static class IdComparator implements Comparator<Student> {
// 如果返回负数,认为第一个参数应该排在前面
// 如果返回正数,认为第二个参数应该排在前面
// 如果返回0,认为谁放前面无所谓
@Override
public int compare(Student o1, Student o2) {
if (o1.id < o2.id) {
return 1;
} else if (o2.id < o1.id) {
return -1;
} else {
return 0;
}
}
}
// 谁age大,谁放前!
public static class AgeComparator implements Comparator<Student> {
// 如果返回负数,认为第一个参数应该排在前面
// 如果返回正数,认为第二个参数应该排在前面
// 如果返回0,认为谁放前面无所谓
@Override
public int compare(Student o1, Student o2) {
if (o1.age < o2.age) {
return 1;
} else if (o2.age < o1.age)