按照从json数据解析的对象排序

时间:2012-12-19 14:59:41

标签: java android comparable

我的Android客户端获得服务器JSON响应如下:

{"students":[{"id":1,"name":"John","age":12},
             {"id":2,"name":"Thmas","age":13}
             {"id":3,"name":"Merit","age":10}
             ...]}

我的Android客户端代码使用gson解析JSON对Java对象的响应。

我对应的Java类:

public class StudentList{
  private List<Student> students;

  public List<Student> getStudents(){
    return students;   
  }
}

public class Student{
  private long id;
  private String name;
  private int age;

  public long getId() {
    return id;
  }
  public String getName(){
    return name;
  }
  public int getAge(){
    return age;
  }

}

此时一切正常,我可以成功地将JSON数据解析为我的Java对象,如下所示:

//'jsonData' is the server responsed json data 
StudentList students = gson.fromJson(jsonData, StudentList.class)

然后,我想修改一下,以字母顺序获取students(来自json数据),按学生的name排序。我尝试了以下方法:(我更改了Student类来实现Comparable<>接口):

public class Student implements Comparable<Student>{
  private long id;
  private String name;
  private int age;

  public long getId() {
    return id;
  }
  public String getName(){
    return name;
  }
  public int getAge(){
    return age;
  }

  // Override compareTo(), sort by 'name'
  @Override
  public int compareTo(Student obj) {
    return this.getName().compareToIgnoreCase(obj.Name());      
  } 
}

使用上面修改过的Student类,我试图再次解析json数据:

//'jsonData' is the server responsed json data 
StudentList students = gson.fromJson(jsonData, StudentList.class)

但结果students仍然与排序前相同。我的排序解决方案根本不起作用。的为什么?我哪里错了?

3 个答案:

答案 0 :(得分:5)

简单地实现Comparable不会使您的类被排序;你必须实际一些东西来排序。

答案 1 :(得分:2)

gson不会对列表中的项目进行排序,它仍然只是添加项目。您可以使用Collections.sort方法创建列表后对列表进行排序:

java.util.Collections.sort(students);

答案 2 :(得分:1)

仅仅因为您的班级Comparable并未使每个收藏集自动排序。您必须使用Collections.sort(students);

之类的内容告诉特定集合使用自然或重新排序