How to sort ArrayList using Comparator?
本问题已经有最佳答案,请猛点这里访问。
我有个班上的学生实现了一个静态方法
1 | public static Comparator<Student> getCompByName() |
返回用于比较两个学生对象的学生的新Comparator对象通过属性"name"。
现在,我需要使用函数getCompabyName()按"name"对学生数组列表进行排序,以此来测试这一点。
这是我在学生班的比较器方法。
1 2 3 4 5 6 7 8 9 10 11 | 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; } |
在我需要测试的地方
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 |
有人能告诉我如何使用我的主目录中的getCompabyName()来按名称对数组列表进行实际排序吗?我对比较器不熟悉,对它们的用法也很难理解。这个方法返回一个比较器,所以我不确定如何实现它。我知道我需要使用getCompabyName()进行排序,我只是不确定如何实现它。
使用collections.sort(list,comparator)方法:
1 |
另外,在代码中,在声明
1 |
您还可以使用
1 2 3 4 5 6 7 8 9 | 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()); } } |
以下是完整来源的要点。
使用
1 |
注意:可能有助于使比较器成为
注2:就地修改列表;不创建新列表。