对从json数据中解析的对象进行排序

joh*_*123 5 java android comparable

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

{"students":[{"id":1,"name":"John","age":12},
             {"id":2,"name":"Thmas","age":13}
             {"id":3,"name":"Merit","age":10}
             ...]}
Run Code Online (Sandbox Code Playgroud)

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

我对应的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;
  }

}
Run Code Online (Sandbox Code Playgroud)

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

//'jsonData' is the server responsed json data 
StudentList students = gson.fromJson(jsonData, StudentList.class)
Run Code Online (Sandbox Code Playgroud)

然后,我想修改一下以按字母顺序获取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());      
  } 
}
Run Code Online (Sandbox Code Playgroud)

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

//'jsonData' is the server responsed json data 
StudentList students = gson.fromJson(jsonData, StudentList.class)
Run Code Online (Sandbox Code Playgroud)

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

Cha*_*tin 5

简单地实现Comparable不会使您的类被排序; 你要真正的东西排序.


Ale*_*s G 2

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

java.util.Collections.sort(students);
Run Code Online (Sandbox Code Playgroud)