排序接口 Comparator
在java中需要对自定义类,具备排序功能,可以实现接口java.util.Comparator
Comparator 接口可以用于对数组、集合等数据结构中的元素进行排序。默认情况下,Comparator 接口按照自然顺序对对象进行比较,即使用对象的 compareTo 方法进行比较。但是,如果你想要自定义对象的比较规则,可以通过实现 Comparator 接口来实现。
接口定义如下
public interface Comparator<T> {
int compare(T o1, T o2);
// 省略不相关代码
}
- x.compareTo(y) : 比较x和y的大小
- return < 0 : x<y
- return = 0 : x=y
- return > 0 : x>y
代码示例
import lombok.Data;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@Data
class Employee {
private int id;
private String name;
private int age;
public Employee(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
class AgeComparator implements Comparator<Employee> {
@Override
public int compare(Employee emp1, Employee emp2) {
return emp1.getAge() - emp2.getAge();
}
}
public class Main {
public static void main(String[] args) {
List<Employee> employees = new ArrayList<>();
employees.add(new Employee(1, "Tom", 30));
employees.add(new Employee(2, "Jerry", 25));
employees.add(new Employee(3, "David", 35));
// 使用自定义的比较器进行排序
Collections.sort(employees, new AgeComparator());
// 或者使用Lambda表达式 不需要实现接口 1
employees.sort((emp1, emp2) -> emp1.getAge() - emp2.getAge());
// 或者使用Lambda表达式 不需要实现接口 2
employees.sort(Comparator.comparingInt(Employee::getAge));
System.out.println("按年龄排序后的员工列表:");
for (Employee emp : employees) {
System.out.println(emp);
}
}
}
运行上述代码,将按照员工的年龄对员工列表进行排序。输出结果如下所示:
按年龄排序后的员工列表:
Employee [id=2, name=Jerry, age=25]
Employee [id=1, name=Tom, age=30]
Employee [id=3, name=David, age=35]