如何使用Comparator对ArrayList进行排序?

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

public static Comparator getCompByName() 

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

我现在需要使用我的函数getCompByName()通过’name’对学生ArrayList进行排序来测试它。

这是我的Student课程中的Comparator方法。

 public static Comparator getCompByName() { Comparator comp = new Comparator(){ @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 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 

任何人都可以告诉我如何使用我的main中的getCompByName()实际按名称对ArrayList进行排序? 我是比较新手,他们的用法很难。 该方法返回一个比较器,所以我不知道如何实现它。 我知道我需要使用getCompByName()进行排序,我只是不确定如何实现它。

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

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

同样在您的代码中,在声明List时使用List接口会很好:

 List students = new ArrayList(); 

您还可以使用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 students = new ArrayList(Arrays.asList(studentArr)); Collections.sort(students, Student.getCompByName()); for(Student student:students){ System.out.println(student.getName()); } } 

这是完整来源的要点 。

使用Collections.sort()

 Collections.sort(students, getCompByName()); 

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

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