根据parentId构建树结构

根据parentId构建树结构

该结构在企业开发中,通过遍历数据库中的数据构建树型结构很常用
Node结构:

@Data
  public class Node {
        private String cId; //id
        private String cName; //name
        private String parentId;
        private List<Node> children;

        public Node(String cId, String cName, String parentId, List<Node> children) {
            this.cId = cId;
            this.cName = cName;
            this.children = children;
            this.parentId = parentId;
        }

一、测试数据:

public static List<Node> getData() {
        Node node1 = new Node("1", "节点a", "0", null);
        Node node2 = new Node("2", "节点b", "1", null);
        Node node3 = new Node("3", "节点c", "1", null);
        Node node4 = new Node("4", "节点d", "2", null);
        List<Node> datas = new ArrayList<>(7);
        datas.add(node1);
        datas.add(node2);
        datas.add(node3);
        datas.add(node4);
        return datas;
    }

二、通过递归给每个Node的parentId为0的节点(根节点parentId为0)构建子节点

public Node buildChildern(Node  node,List<Node> nodes){
        List<Node> children = new ArrayList<>();
        if(node != null){
        nodes.forEach((o)->{
            if(o.getParentId().equals(node.cId)){
                children.add(buildChildern(o,nodes)); //递归调用
            }
        });
      }
        node.setChildren(children); 
        return node;
    }

三、找出其中的根节点

 public List<Node> getRootNode(List<Node> nodes){
        List<Node> roots = new ArrayList<>();
        nodes.forEach(o->{
            if(o.getParentId().equals("0")){
                roots.add(o);
            }
        });
        return roots;
    }

四、最后构建树

 public List<Node> builTree(List<Node> nodes){
        List<Node> roots = new ArrayList<>() ;
        getRootNode(nodes).forEach(o->{
            Node node = buildChildern(o, nodes);
            roots.add(node);
        });
        return roots;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值