原理介绍:
1.先根据根部门0查询根部门下的部门列表。
2.然后遍历部门列表。
3.然后每个部门下都查询子部门以及当前部门下的人员(调用getChildren()方法)。
4.查询子方法是又将id作为父id,再次调用子方法本身(调用getChildren()方法),如此反复即可实现。
代码:
import com.alibaba.fastjson2.JSONArray;
import java.util.ArrayList;
import java.util.List;
class demo {
//实体
public static class KsB
{
private String code; //id
private String idParent; //父id
private String name; //部门名称
private JSONArray children = new JSONArray(); //存储子部门
public String getName() {
return name;
}
public JSONArray getChildren() {
return children;
}
public void setChildren(JSONArray children) {
this.children = children;
}
public void setCode(String code)
{
this.code = code;
}
public String getCode()
{
return code;
}
public void setIdParent(String idParent)
{
this.idParent = idParent;
}
public String getIdParent()
{
return idParent;
}
public void setName(String name)
{
this.name = name;
}
@Override
public String toString() {
return "KsB{" +
"code='" + code + '\'' +
", idParent='" + idParent + '\'' +
", name='" + name + '\'' +
", children=" + children +
'}';
}
}
public static void main(String [] arg){
List<KsB> ksBList = new ArrayList<>();
//添加第一级
KsB ksB = new KsB();
ksB.setCode("1000");
ksB.setIdParent("0");
ksB.setName("康复中心门诊");
ksBList.add(ksB);
KsB ksB1 = new KsB();
ksB1.setCode("1001");
ksB1.setIdParent("0");
ksB1.setName("妇产科");
ksBList.add(ksB1);
KsB ksB2 = new KsB();
ksB2.setCode("1002");
ksB2.setIdParent("0");
ksB2.setName("骨伤科");
ksBList.add(ksB2);
//添加第二级
KsB ksB3 = new KsB();
ksB3.setCode("10021");
ksB3.setIdParent("1002");
ksB3.setName("颈肩腰腿痛专科门诊");
ksBList.add(ksB3);
KsB ksB4 = new KsB();
ksB4.setCode("10022");
ksB4.setIdParent("1002");
ksB4.setName("骨伤二科(康复六科)门诊");
ksBList.add(ksB4);
KsB ksB5 = new KsB();
ksB5.setCode("10001");
ksB5.setIdParent("1000");
ksB5.setName("肌骨疼痛康复门诊");
ksBList.add(ksB5);
KsB ksB6 = new KsB();
ksB6.setCode("10002");
ksB6.setIdParent("1000");
ksB6.setName("脑卒中康复门诊");
ksBList.add(ksB6);
//添加第三级
KsB ksB7 = new KsB();
ksB7.setCode("100021");
ksB7.setIdParent("10002");
ksB7.setName("脑卒中康复门诊-小门诊");
ksBList.add(ksB7);
KsB ksB8 = new KsB();
ksB8.setCode("100022");
ksB8.setIdParent("10002");
ksB8.setName("脑卒中康复门诊-小门诊-小小门诊");
ksBList.add(ksB8);
JSONArray jsonArray = new JSONArray();
for (KsB b : ksBList) {
//根据最外层部门的父id 查询最外层部门
if ("0".equals(b.getIdParent())){
KsB parentKsb = new KsB();
parentKsb.setCode(b.getCode());
parentKsb.setIdParent(b.getIdParent());
parentKsb.setName(b.getName());
parentKsb.setChildren(getChildren(ksBList,b.getCode()));
jsonArray.add(parentKsb);
}
}
System.out.println("jsonArray----:"+jsonArray);
}
//递归查询子部门
public static JSONArray getChildren(List<KsB> list,String code){
JSONArray jsonArray = new JSONArray();
for (KsB b : list) {
if (code.equals(b.getIdParent())){
KsB chKsb = new KsB();
chKsb.setCode(b.getCode());
chKsb.setIdParent(b.getIdParent());
chKsb.setName(b.getName());
chKsb.setChildren(getChildren(list,b.getCode()));
jsonArray.add(chKsb);
}
}
return jsonArray;
}
}