如何使用比较器对数组列表进行排序?

我有一个实现静态方法的班级学生

public static Comparator<Student> getCompByName()

返回 Student 的新比较器对象,该对象通过属性“name”比较 2 个 Students 对象。

我现在需要通过使用我的函数getCompByName()按“名称”对学生ArrayList进行排序来测试这一点。

这是我在学生班上的比较器方法。

public static Comparator<Student> getCompByName()
{   
 Comparator comp = new Comparator<Student>(){
     @Override
     public int compare(Student s1, Student s2)
     {
         return s1.name.compareTo(s2.name);
     }        
 };
 return comp;
}  

我需要测试的主要位置

public static void main(String[] args)
{
    // TODO code application logic here

    //--------Student Class Test-------------------------------------------
    ArrayList<Student> students = new ArrayList();
    Student s1 = new Student("Mike");
    Student s2 = new Student("Hector");
    Student s3 = new Student("Reggie");
    Student s4 = new Student("zark");
    students.add(s1);
    students.add(s2);
    students.add(s3);
    students.add(S4);

    //Use getCompByName() from Student class to sort students

任何人都可以向我展示如何使用我的主数据库中的getCompByName()来实际按名称对ArrayList进行排序?我是比较器的新手,很难使用它们。该方法返回一个比较器,因此我不确定这将如何实现。我知道我需要使用getCompByName()进行排序,我只是不知道如何实现它。


答案 1

使用 Collections.sort(List, Comparator) 方法:

Collections.sort(students, Student.getCompByName());

此外,在您的代码中,最好在声明 :ListList

List<Student> students = new ArrayList();

您还可以通过使用 a 并将其传递给构造函数来收紧代码:Student[]ArrayList

public static void main(String[] args) {
    Student[] studentArr = new Student[]{new Student("Mike"),new Student("Hector"), new Student("Reggie"),new Student("zark")};
    List<Student> students = new ArrayList<Student>(Arrays.asList(studentArr));
    Collections.sort(students, Student.getCompByName());

    for(Student student:students){
        System.out.println(student.getName());
    }
}

这是完整来源的要点


答案 2

使用 Collections.sort()

Collections.sort(students, getCompByName());

注意:可能有助于使比较器成为变量。private static final

注2:就修改列表;不创建新列表。


推荐