直接上代码

// 初始化数据
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;
    }
}