首页 > 解决方案 > 以给定格式将 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"
                }
            ]
        }
    ] 

标签: javaarrayslistspring-boot

解决方案


你缺少hashcodeequals方法。

您无法直接确定您的列表是否已包含该部门。

在您的课程中添加以下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, setterfor list 并使用它来添加项目。

如果对象sublistdivision空,则创建一个列表并将项目添加到其中。否则将项目添加到它。

为避免重复值,您还需要执行same for SubD该类。


推荐阅读