引用:https://blog.csdn.net/u014204541/article/details/96484771
在大佬的基础上改了改,适合我这个项目使用,
/**
* 核心思想:
* 判断传入的父名是否等于自身的父名,如果是,就说明自己是子节点,再递归自己这个节点,
* 判断是否还有子节点;
*/
public List<Map<String, Object>> getChild(String pName, List<ContactInfo> allList) {
List<Map<String, Object>> childList = new ArrayList<>();// 用于保存子节点的list
for (ContactInfo contact : allList) {
if (pName.equals(String.valueOf(contact.getParentName()))) {// 判断传入的父名是否等于自身的父名,如果是,就说明自己是子节点
Map<String, Object> map = new HashMap<>();
map.put("depart", contact.getDepart());
map.put("name", contact.getName());
map.put("title", contact.getDepart());
map.put("children", new Object[] {});
childList.add(map); // 加入子节点
}
}
for (Map<String, Object> map : childList) {// 遍历子节点,继续递归判断每个子节点是否还含有子节点
List<Map<String, Object>> tList = getChild(String.valueOf(map.get("depart")), allList);
map.put("children", tList);
}
return childList;
}
调用这个方法:
ArrayList<ContactInfo> contactInfoList = XXXXX;// 要递归的数据列表
// 根节点的父节点设置为null了,所以从null开始
List list2 = getChild("null",contactInfoList);
Object object = list2.get(0);
String json = JSON.toJSONString(object);
return json;
数据库结构: