如何排序和保留Web服务的结果?

时间:2014-02-16 10:33:50

标签: java sorting arraylist comparable

我有一个类,其中包含一个对象列表。我需要根据列表对象的浮点值对列表进行排序,但下面的代码不起作用,使用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());

4 个答案:

答案 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());升序和降序。