我有一个实施静态方法的班级学生
public static Comparator<Student> getCompByName()
返回Student的新比较器对象,用于比较2个Students对象 通过属性'name'。
我现在需要使用我的函数getCompByName()通过'name'对学生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
有人能告诉我如何使用我的main中的getCompByName()实际按名称对ArrayList进行排序吗?我是比较新手,他们的用法很难。该方法返回一个比较器,所以我不知道如何实现它。我知道我需要使用getCompByName()进行排序,我只是不确定如何实现它。
答案 0 :(得分:16)
使用Collections.sort(List, Comparator)方法:
Collections.sort(students, Student.getCompByName());
同样在您的代码中,在声明List
时使用List
界面会很好:
List<Student> 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<Student> students = new ArrayList<Student>(Arrays.asList(studentArr));
Collections.sort(students, Student.getCompByName());
for(Student student:students){
System.out.println(student.getName());
}
}
答案 1 :(得分:5)
Collections.sort(students, getCompByName());
注意:使比较器成为private static final
变量可能很有用。
注意2:修改列表到位;不会创建新列表。