代码如下:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.alibaba.druid.support.json.JSONUtils;
public class 递归生成树 {
public static void main(String[] args) {
List<Map<String, Object>> list = getList();
// 输出原始数据
for (Map<String, Object> map : list) {
System.out.println(map);
}
// 先拿出根节点
List<Map<String, Object>> rootList = list.stream().filter(s -> s.get("parent_tree_id") == null).collect(Collectors.toList());
// 把根节点和全部节点一起传进去递归去构造树
diGui(rootList, list);
// 转成json打印出来看看
System.err.println(JSONUtils.toJSONString(rootList));
// [{"tree_id":"1","tree_order":1,"tree_name":"配置采集","tree_level":1,"parent_tree_id":null,"child":[{"tree_id":"2","tree_order":1,"tree_name":"bbbbbb","tree_level":2,"parent_tree_id":"1","child":[]},{"tree_id":"3","tree_order":2,"tree_name":"都是","tree_level":2,"parent_tree_id":"1","child":[{"tree_id":"4","tree_order":1,"tree_name":"ttt","tree_level":3,"parent_tree_id":"3","child":[]}]}]},{"tree_id":"11","tree_order":2,"tree_name":"aaaaa","tree_level":1,"parent_tree_id":null,"child":[{"tree_id":"22","tree_order":1,"tree_name":"hahaha","tree_level":2,"parent_tree_id":"11","child":[]}]},{"tree_id":"111","tree_order":3,"tree_name":"ooooooooo","tree_level":1,"parent_tree_id":null,"child":[]}]
// https://www.json.cn中去看结构
}
public static void diGui(List<Map<String, Object>> rootList, List<Map<String, Object>> allList) {
for (Map<String, Object> m1 : rootList) {
List<Map<String, Object>> childList = new ArrayList<>();
for (Map<String, Object> m2 : allList) {
if (toString(m1.get("tree_id")).equals(toString(m2.get("parent_tree_id")))) {
childList.add(m2);
}
}
m1.put("child", childList);
if (childList.size() > 0) {
diGui(childList, allList);
}
}
}
// 构造测试数据
public static List<Map<String, Object>> getList() {
List<Map<String, Object>> list = new ArrayList<>();
// tree_id=主键,parent_tree_id父节点id
Map<String, Object> m1 = new HashMap<>();
m1.put("tree_id", "1");
m1.put("tree_name", "配置采集");
m1.put("tree_level", 1);
m1.put("tree_order", 1);
m1.put("parent_tree_id", null);
Map<String, Object> m2 = new HashMap<>();
m2.put("tree_id", "11");
m2.put("tree_name", "aaaaa");
m2.put("tree_level", 1);
m2.put("tree_order", 2);
m2.put("parent_tree_id", null);
Map<String, Object> m3 = new HashMap<>();
m3.put("tree_id", "2");
m3.put("tree_name", "bbbbbb");
m3.put("tree_level", 2);
m3.put("tree_order", 1);
m3.put("parent_tree_id", "1");
Map<String, Object> m4 = new HashMap<>();
m4.put("tree_id", "22");
m4.put("tree_name", "hahaha");
m4.put("tree_level", 2);
m4.put("tree_order", 1);
m4.put("parent_tree_id", "11");
Map<String, Object> m5 = new HashMap<>();
m5.put("tree_id", "3");
m5.put("tree_name", "都是");
m5.put("tree_level", 2);
m5.put("tree_order", 2);
m5.put("parent_tree_id", "1");
Map<String, Object> m6 = new HashMap<>();
m6.put("tree_id", "4");
m6.put("tree_name", "ttt");
m6.put("tree_level", 3);
m6.put("tree_order", 1);
m6.put("parent_tree_id", "3");
Map<String, Object> m7 = new HashMap<>();
m7.put("tree_id", "111");
m7.put("tree_name", "ooooooooo");
m7.put("tree_level", 1);
m7.put("tree_order", 3);
m7.put("parent_tree_id", null);
list.add(m1);
list.add(m2);
list.add(m3);
list.add(m4);
list.add(m5);
list.add(m6);
list.add(m7);
return list;
}
public static String toString(Object obj) {
return obj == null || obj.toString().length() == 0 ? "" : obj.toString();
}
}