直接上代码
// 初始化数据
List<TreePojo> treeData = new ArrayList<>();
treeData.add(new TreePojo("1", "0", "根节点"));
treeData.add(new TreePojo("2", "1", "父节点1"));
treeData.add(new TreePojo("3", "1", "父节点2"));
treeData.add(new TreePojo("4", "2", "子节点1"));
treeData.add(new TreePojo("5", "2", "子节点2"));
// 转换为 key=pid value = pojo
Map<String, List<TreePojo>> treeMap = new HashMap<>();
for (TreePojo treeItem : treeData) {
List<TreePojo> treePojos = treeMap.computeIfAbsent(treeItem.getPid(), k -> new ArrayList<>());
treePojos.add(treeItem);
}
// 拿到根节点
List<TreePojo> treePojos = treeMap.get("0");
for (TreePojo treePojo : treePojos) {
// 递归生成树结构
buildTree(treePojo, treeMap);
}
递归函数
private static void buildTree(TreePojo item, Map<String, List<TreePojo>> treeMap) {
// 使用hash的方式减少复杂度
List<TreePojo> treeData = treeMap.get(item.getId());
if (treeData != null) {
item.setChildren(treeData);
for (TreePojo treePojo : treeData) {
buildTree(treePojo, treeMap);
}
}
}
对象
import java.util.List;
public class TreePojo {
String id;
String pid;
String name;
/**
* 子对象
*/
List<TreePojo> children;
public TreePojo(String id, String pid, String name) {
this.id = id;
this.pid = pid;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<TreePojo> getChildren() {
return children;
}
public void setChildren(List<TreePojo> children) {
this.children = children;
}
}