有这样的一张Mysql表
company | company_name | dept | dept_name | job | job_name |
---|
c1 | 企业A | d1 | 财务部 | j1 | 财务主管 |
c1 | 企业A | d1 | 财务部 | j2 | 会计 |
c1 | 企业A | d2 | 技术部 | j21 | Java |
c1 | 企业A | d2 | 技术部 | j22 | JS |
c2 | 企业B | d20 | 销售部 | j20 | 销售员 |
DTO实体类
@Data
public static class Company {
private String code;
private String name;
private List<Department> departments;
}
@Data
public static class Department {
private String code;
private String name;
private List<Job> jobs;
}
@Data
public static class Job {
private String code;
private String name;
}
查出表中全部数据,如何返回以下的格式?
[
{
"code": "C1",
"name": "企业A",
"departments": [
{
"code": "d1",
"name": "财务部",
"jobs": [
{
"code": "j1",
"name": "财务主管"
},
{
"code": "j2",
"name": "会计"
}
]
},
{
"code": "d2",
"name": "技术部",
"jobs": [
{
"code": "j21",
"name": "Java"
},
{
"code": "j22",
"name": "JS"
}
]
}
]
},{
"code": "C2",
"name": "企业B",
"departments": [
{
"code": "d20",
"name": "销售部",
"jobs": [
{
"code": "j20",
"name": "销售员"
}
]
}
]
}
]
我的思路
1.查出整张表的数据
List<Po> records = "select * from table";
2.声明数组data保存结果 List<Company> data = new ArrayList<>();
3.遍历records
for(Po po : records) {
Job job = new Job();
job.setName(po.getJobName);
job.setCode(po.getCode);
boolean addCompany = true;
/**
*判断po是否存在于data数组,
1.存在
获取所有部门,遍历,继续判断部门是否存在,
i.存在就添加job,
ii.不存在就添加department
2.不存在,则新增company
*/
// 遍历data
for(Company c : data) {
if (po.getCompanyCode().equals(c.getCode())) {
List<Department> depts = c.getDepartments();
boolean addDept = true;
for (Department dept : depts) {
if (po.getDeptCode().equals(dept.getCode())) {
dept.getJobs().add(job);
addDept = false;
}
}
if (addDept) {
List<Job> jobs = new ArrayList<>();
jobs.add(job);
Department deptRow = new Department();
deptRow.setCode(po.getDeptCode());
deptRow.setName(po.getDeptName());
deptRow.setJobs(jobs);
c.getDepartments().add(deptRow);
}
addCompany = false;
}
}
if(addCompany) {
Company company = new Company();
data.add(company);
}
}
可以借助两个
HashMap
来实现一次遍历完成树状结构,如下。