如何使用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:修改列表; 不会创建新列表。