常用办公系统都有自己的一个组织树,作为后端我们该如何去对他们进行层层分级,并且进行排列呢?下面是代码实现
首先,这是一个简单的组织对象,下面有一个基本的子组织列表,和父组织编码
public class Org {
private String num;
private String rootNum;
private List<Org> list;
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public List<Org> getList() {
return list;
}
public void setList(List<Org> list) {
this.list = list;
}
public String getRootNum() {
return rootNum;
}
public void setRootNum(String rootNum) {
this.rootNum = rootNum;
}
public Org(String num, String rootNum, List<Org> list) {
this.num = num;
this.rootNum = rootNum;
this.list = list;
}
}
第二部,对组织进行层层分类:
public static void main(String[] args) {
Org orgTree = getOrgTree();
String string = JSONObject.toJSONString(orgTree);
System.out.println(string);
}
public static Org getOrgTree() {
// 查询所有组织数据
List<Org> allOrgs = Arrays.asList(
new Org("A010201","A0102",new ArrayList<>()),
new Org("A010202","A0102",new ArrayList<>()) ,
new Org("A01","",new ArrayList<>()),
new Org("A0101","A01",new ArrayList<>()),
new Org("A0102","A01",new ArrayList<>()),
new Org("A010101","A0101",new ArrayList<>()),
new Org("A010102","A0102",new ArrayList<>())
);
// 将所有组织数据转换为树形结构
Map<String, Org> orgMap = new HashMap<>();
for (Org org : allOrgs) {
orgMap.put(org.getNum(), org);
}
for (Org org : allOrgs) {
String parentNum = org.getRootNum();
if (parentNum!= null &&!parentNum.equals("")) {
Org parent = orgMap.get(parentNum);
if (parent!= null) {
if (parent.getList() == null) {
parent.setList(new ArrayList<>());
}
parent.getList().add(org);
}
}
}
// 返回根组织对象
for (Org org : allOrgs) {
if (org.getRootNum() == null || org.getRootNum().equals("")) {
return org;
}
}
return null;
}