5

私の Android クライアントは、次のようにサーバーの JSON 応答を取得します。

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

私の 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;
  }

}

この時点ですべてが正常に機能し、次のように 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はソート前と同じです。私の並べ替えソリューションはまったく機能しません。どうして??どこが間違っていますか??

4

3 に答える 3

5

Comparable を実装するだけでは、クラスはソートされません。あなたは実際にそれをソートするために何かをしなければなりません。

于 2012-12-19T15:03:17.397 に答える
2

gson はリスト内のアイテムをソートしません。アイテムを追加するだけです。Collections.sortメソッドを使用して、作成後にリストを並べ替えることができます。

java.util.Collections.sort(students);
于 2012-12-19T15:04:02.220 に答える
1

あなたのクラスがComparableすべてのコレクションを自動的にソートするわけではないという理由だけで。次のようなものを使用して、特定のコレクションに自然な順序付けを使用してソートするように指示する必要がありますCollections.sort(students);

于 2012-12-19T15:03:24.053 に答える