【发布时间】:2020-11-18 05:37:28
【问题描述】:
我有一个 JSON 数组,它需要以与所附屏幕截图相似的方式进行解析。因此,例如,JSON 数组将在下面给出,它有六个元素需要使用循环解析但无法生成正确的数据结构。有不同的级别,如果孩子有一个共同的父母,那么它只需要使用该父母 ID 进行管理。对于级别 1,将没有父 ID
JSON 数组
"clubSubAreas":[
{
"id":573801,
"clubId":16733,
"areaId":58482,
"name":"subcoach c2a",
"level":4,
"parentId":569125,
"clubMemberSubAreas":{}
},
{
"id":569114,
"clubId":16733,
"areaId":53279,
"name":"Hockey",
"level":1,
"parentId":null,
"clubMemberSubAreas":{}
},
{
"id":569122,
"clubId":16733,
"areaId":53280,
"name":"Team H2",
"level":2,
"parentId":569114,
"clubMemberSubAreas":{}
},
{
"id":569131,
"clubId":16733,
"areaId":53281,
"name":"Coach H2",
"level":3,
"parentId":569122,
"clubMemberSubAreas":{}
},
{
"id":569119,
"clubId":16733,
"areaId":53280,
"name":"Team F2",
"level":2,
"parentId":569112,
"clubMemberSubAreas":{}
},
{
"id":569127,
"clubId":16733,
"areaId":53281,
"name":"Coach F1",
"level":3,
"parentId":569118,
"clubMemberSubAreas":{}
},
{
"id":569851,
"clubId":16733,
"areaId":58482,
"name":"sub coach f1",
"level":4,
"parentId":569127,
"clubMemberSubAreas":{}
},
{
"id":569112,
"clubId":16733,
"areaId":53279,
"name":"Football",
"level":1,
"parentId":null,
"clubMemberSubAreas":{}
},
{
"id":569118,
"clubId":16733,
"areaId":53280,
"name":"Team F1",
"level":2,
"parentId":569112,
"clubMemberSubAreas":{}
},
{
"id":569716,
"clubId":16733,
"areaId":58482,
"name":"subcoasch c2",
"level":4,
"parentId":569125,
"clubMemberSubAreas":{}
},
{
"id":569125,
"clubId":16733,
"areaId":53281,
"name":"Coach C2",
"level":3,
"parentId":569116,
"clubMemberSubAreas":{}
},
{
"id":569116,
"clubId":16733,
"areaId":53280,
"name":"Team C2",
"level":2,
"parentId":569113,
"clubMemberSubAreas":{}
},
{
"id":573787,
"clubId":16733,
"areaId":58482,
"name":"subcoach c2 new",
"level":4,
"parentId":573786,
"clubMemberSubAreas":{}
},
{
"id":573786,
"clubId":16733,
"areaId":53281,
"name":"Coach C2 new",
"level":3,
"parentId":569116,
"clubMemberSubAreas":{}
},
{
"id":569113,
"clubId":16733,
"areaId":53279,
"name":"Cricket",
"level":1,
"parentId":null,
"clubMemberSubAreas":{}
}
]
基本上,我想在回收器视图中显示数据,但无法从给定的 JSON 响应中使用 ArrayList/Hashmap/TreeMap 制作数据结构
我的工作:
ArrayList<ClubSubArea> clubSubAreaDept = new ArrayList<>();
ArrayList<ClubSubArea> clubSubAreaSubDept = new ArrayList<>();
ArrayList<ClubSubArea> clubSubAreaFunc = new ArrayList<>();
ArrayList<ClubSubArea> clubSubAreaLevelFour = new ArrayList<>();
for (ClubSubArea clubSubArea : clubMemberDataEdit.getClubSubAreas()) {
if (clubSubArea.getLevel() == 1) {
clubSubAreaDept.add(clubSubArea);
} else if (clubSubArea.getLevel() == 2) {
clubSubAreaSubDept.add(clubSubArea);
} else if (clubSubArea.getLevel() == 3) {
clubSubAreaFunc.add(clubSubArea);
} else {
clubSubAreaLevelFour.add(clubSubArea);
}
}
ArrayList<ClubAreaCombine> clubAreaCombines1 = new ArrayList<>();
ArrayList<ClubAreaCombine> clubAreaCombines = new ArrayList<>();
if (clubAreas != null && clubAreas.size() > 0) {
for (ClubSubArea clubSubAreaDepartment : clubSubAreaDept) {
for (ClubSubArea clubSubAreaSubDepartment : clubSubAreaSubDept) {
if (clubSubAreaSubDepartment.getParentId() == clubSubAreaDepartment.getId()) {
for (ClubSubArea clubSubAreaFunction : clubSubAreaFunc) {
if (clubSubAreaFunction.getParentId() == clubSubAreaSubDepartment.getId()) {
if (clubSubAreaLevelFour != null && clubSubAreaLevelFour.size() > 0) {
for (ClubSubArea clubSubAreaLFour : clubSubAreaLevelFour) {
if (clubSubAreaLFour.getParentId() == clubSubAreaFunction.getId()) {
ClubAreaCombine clubAreaCombine = new ClubAreaCombine(clubSubAreaDepartment,
clubSubAreaSubDepartment,
clubSubAreaFunction,
clubSubAreaLFour);
clubAreaCombines1.add(clubAreaCombine);
} else {
ClubAreaCombine clubAreaCombine = new ClubAreaCombine(clubSubAreaDepartment,
clubSubAreaSubDepartment,
clubSubAreaFunction, null);
clubAreaCombines1.add(clubAreaCombine);
}
}
} else {
ClubAreaCombine clubAreaCombine = new ClubAreaCombine(clubSubAreaDepartment,
clubSubAreaSubDepartment,
clubSubAreaFunction,
null);
clubAreaCombines1.add(clubAreaCombine);
}
} else {
ClubAreaCombine clubAreaCombine = new ClubAreaCombine(clubSubAreaDepartment,
clubSubAreaSubDepartment,
null,
null);
clubAreaCombines1.add(clubAreaCombine);
}
}
} else {
ClubAreaCombine clubAreaCombine = new ClubAreaCombine(clubSubAreaDepartment,
null,
null,
null);
clubAreaCombines1.add(clubAreaCombine);
}
}
}
}
for (ClubAreaCombine clubAreaCombine : clubAreaCombines1) {
if (!clubAreaCombines.contains(clubAreaCombine)) {
clubAreaCombines.add(clubAreaCombine);
}
}
俱乐部子区
public class ClubSubArea implements Serializable {
@SerializedName("id")
private long id;
@SerializedName("clubId")
private Long clubId;
@SerializedName("name")
private String name;
@SerializedName("level")
private int level;
@SerializedName("areaId")
private Long areaId;
@SerializedName("parentId")
private Long parentId;
@SerializedName("_links")
List<Links> links;
List<ClubSubArea> subAreaList = new ArrayList<>();
@SerializedName("clubMemberSubAreas")
ClubMemberSubAreas clubMemberSubAreas;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public Long getClubId() {
return clubId;
}
public void setClubId(Long clubId) {
this.clubId = clubId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public Long getAreaId() {
return areaId;
}
public void setAreaId(Long areaId) {
this.areaId = areaId;
}
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public List<Links> getLinks() {
return links;
}
public void setLinks(List<Links> links) {
this.links = links;
}
public List<ClubSubArea> getSubAreaList() {
return subAreaList;
}
public void setSubAreaList(ArrayList<ClubSubArea> subAreaList) {
this.subAreaList = subAreaList;
}
public ClubMemberSubAreas getClubMemberSubAreas() {
return clubMemberSubAreas;
}
public void setClubMemberSubAreas(ClubMemberSubAreas clubMemberSubAreas) {
this.clubMemberSubAreas = clubMemberSubAreas;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ClubSubArea that = (ClubSubArea) o;
if (id != that.id) return false;
if (level != that.level) return false;
if (!clubId.equals(that.clubId)) return false;
return parentId != null ? parentId.equals(that.parentId) : that.parentId == null;
}
@Override
public int hashCode() {
int result = (int) (id ^ (id >>> 32));
result = 31 * result + clubId.hashCode();
result = 31 * result + level;
result = 31 * result + (parentId != null ? parentId.hashCode() : 0);
return result;
}
}
网络上显示的数据如下
【问题讨论】:
-
请展示你的作品。
-
@IntelliJAmiya 添加了我的工作
标签: android arraylist android-recyclerview