Мой клиент Android получает ответ JSON сервера следующим образом:
{"students":[{"id":1,"name":"John","age":12}, {"id":2,"name":"Thmas","age":13} {"id":3,"name":"Merit","age":10} ...]}
Мой код клиента Android анализирует ответ JSON на объект Java с помощью gson .
Мои соответствующие классы 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
) в алфавитном порядке, отсортированных по имени ученика. Я пробовал следующим образом: (я изменил класс 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
по-прежнему остаются такими же, как и до сортировки. Мое решение для сортировки не работает вообще. Зачем?? Где я ошибаюсь?
Gson не будет сортировать элементы в списке, он все равно просто добавит элементы. Вы можете отсортировать список после его создания с помощью метода Collections.sort
:
java.util.Collections.sort(students);
Простое внедрение Comparable не приведет к сортировке вашего класса; Вы должны на самом деле что- то сделать, чтобы отсортировать его.
Просто потому, что ваш класс Comparable
не позволяет каждой коллекции автоматически сортировать себя. Вы должны указать определенную коллекцию для сортировки с использованием естественного упорядочения, используя что-то вроде Collections.sort(students);