如何在使用 gson 解析 json 数据时对内部对象进行排序



我有两个类。

类子类别

public class SubCategory implements Comparable<SubCategory>{
    private int scid;
    private String scname;
    public SubCategory(int scid, String scname) {
        this.scid = scid;
        this.scname = scname;
    }
    public int getScid() {
        return scid;
    }
    public void setScid(int scid) {
        this.scid = scid;
    }
    public String getScname() {
        return scname;
    }
    public void setScname(String scname) {
        this.scname = scname;
    }
    public int compareTo(SubCategory subCategory){
        return this.getScname().compareTo(subCategory.getScname());
    }
}

类类别

public class Category implements Comparable<Category>{
    private int id;
    private String name;
    private String image;
    private int display_with;
    private List<SubCategory> subcategories;
    public Category(int id, String name, String image, int display_with, List<SubCategory> subcategories) {
        this.id = id;
        this.name = name;
        this.image = image;
        this.display_with = display_with;
        this.subcategories = subcategories;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getImage() {
        return image;
    }
    public void setImage(String image) {
        this.image = image;
    }
    public int getDisplay_with() {
        return display_with;
    }
    public void setDisplay_with(int display_with) {
        this.display_with = display_with;
    }
    public List<SubCategory> getSubcategories() {
        return subcategories;
    }
    public void setSubcategories(List<SubCategory> subcategories) {
        this.subcategories = subcategories;
    }
    public int compareTo(Category category){
        return this.getName().compareTo(category.getName());
    }
}    

这是回传请求。

 Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constants.BASERESTURL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

我正在使用gson库在改造响应中解析数据

  public void onResponse(retrofit.Response<List<Category>> response, Retrofit retrofit) {
      loading.dismiss();
      List<Category> categories = response.body();
      Collections.sort(categories);
      Utility.setCategories(categories);
  }    

我可以使用 Collections.sort(categories) 对类别进行排序;

但是如何用类别对子类别进行排序呢?

您可以在 setSubcategory 中执行此操作,因此每次设置新的子类别时,它们都会被排序:

public void setSubcategories(List<SubCategory> subcategories) {
    Collections.sort(subcategories)
    this.subcategories = subcategories;
}

此外,您应该在构造函数中将this.subcategories = subcategories;替换为this.setSubcategories(subcategories)

最新更新