我有一个类,其中包含一个对象列表。我需要根据列表对象的浮点值对列表进行排序,但下面的代码不起作用,使用Array.sort方法后我打印出集合但学生列表不会根据GPA排序。
学校班级
public class School{
private List<Student> students;
public School(){
this.students = new ArrayList();
}
}
学生班
public class Student implements Comparable<Student> {
private int id;
private float GPA;
...
public int compareTo(Student student) {
float compareGPA = student.getGPA();
return (int)(this.getGPA() - compareGPA);
}
}
用于排序主要方法
的代码 Arrays.sort(this.school.getStudents().toArray());
答案 0 :(得分:2)
你可以这样排序:
Collections.sort(this.school.getStudents());
你也应该在这里指定<Student>
:
this.students = new ArrayList<Student>();
答案 1 :(得分:1)
问题是你正在对一个中间结果进行排序 - 一个没有存储在任何地方的数组 - 并且你没有对它做任何事情。
你现在基本上做的是:
Object[] intermediate = this.school.getStudents().toArray();
Arrays.sort(intermediate);
//do nothing with intermediate
解决方案是使用Collections.sort()
代替(更好) - 或者存储中间数组,对其进行排序,然后将其还原回students
列表(更糟糕)
答案 2 :(得分:1)
this.school.getStudents().toArray()
创建一个临时数组实例,Array.sort()
对临时数组进行排序,而不是实际的ArrayList
。您可以使用Collections.sort(this.school.getStudents());
代替
答案 3 :(得分:0)
您可以分别使用Collections.sort(this.school.getStudents());
或Collections.reverse(this.school.getStudents());
升序和降序。