java - 以给定格式将 ArrayList 数据存储到 Object 中
问题描述
CompanyData 类包含变量
List<Division> Divisions
除法类包含变量。
String Id,String Name,List<SubD> subD
SubD 类包含
String subId,String subName
下面的方法打印列表
List<Info> dataList = daoImpl.getData(requestId);
前任:[{"Id":01,"Name":XYZ,"subId":"123","subName":"ABC"},{"Id":01,"Name":XYZ,"subId":"456","subName":"DEF"}]
我正在使用 foreach 循环迭代列表:
List<Division> divisionsList = new ArrayList<>();
CompanyData companydata = new ComapanyData();
dataList.stream().forEach(e -> {
Division divisions = new Division();
List<SubD> subList = new ArrayList<>();
SubD subd = new SubD();
divisions.setId(e.get_id());
divisions.setName(e.get_name());
subd.setSubId(e.getSub_id());
subd.setSubName(e.getSub_name());
subList.add(subd);
divisions.setSubD(subList);
divisionsList.add(divisions);
});
上面的代码以以下格式打印数据:
"divisions": [
{
"Id": "01",
"Name": "XYZ",
"sub": [
{
"subId": "123",
"subName": "ABC"
}
]
},
{
"Id": "01",
"Name": "XYZ",
"sub": [
{
"subId": "456",
"subName": "DEF"
}
]
}
]
但是有没有办法以下面的格式打印数据如果 Id 相同,它应该在同一个子列表中打印它。
divisions": [
{
"Id": "01",
"Name": "XYZ",
"sub": [
{
"subId": "123",
"subName": "ABC"
},
{
"subId": "456",
"subName": "DEF"
}
]
}
]
解决方案
你缺少hashcode
和equals
方法。
您无法直接确定您的列表是否已包含该部门。
在您的课程中添加以下Division
内容。
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
Division div = (Division) o;
return id != null ? s.equals(div.id) : div.id == null;
}
@Override
public int hashCode() {
return id != null ? id.hashCode() : 0;
}
参考更多信息
还有一件事情:
如果你List<SubD> subList = new ArrayList<>();
在循环内做,那就错了。你应该有getter, setter
for list 并使用它来添加项目。
如果对象sublist
为division
空,则创建一个列表并将项目添加到其中。否则将项目添加到它。
为避免重复值,您还需要执行same for SubD
该类。