Java需求出发:数据快速建立出树形结构

如上图,这就是我想投建出来的树形结构目录(后面贴图)

我就直接说了,我不会,我是百度出来的,这里就大概给你们讲讲。
直接上代码吧。

一个Node 类,用来定义每个节点拥有的值。

package com.example.myapp.tree;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * @author dcong
 * @package_name:com.example.myapp.tree
 * @date: 2021/1/25
 * @desc: 就是使用lombok 构建一个实体
 */

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Node {
    
    
    /**
     * id
     */
    private int id;
    /**
     * 父节点id
     */
    private int pid;
    /**
     * 名称
     */
    private String name;
    /**
     * 子节点
     */
    private List<Node> children;
}

然后就是构建的代码类

package com.example.myapp.tree;

import avro.shaded.com.google.common.collect.Lists;
import com.alibaba.fastjson.JSON;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author dcong
 * @package_name:com.example.myapp.tree
 * @date: 2021/1/25
 * @desc: 构建和调用的类
 */

public class Build {
    
    
    public static void main(String[] args) {
    
    
        // 暂时使用main函数,需要定义一个类对象
        Build build = new Build();
        // 构建node节点
        Node dennis = new Node(1, 0, "dennis", null);
        Node calm = new Node(2, 0, "calm", null);
        Node daughter = new Node(3, 1, "daughter", null);
        Node grandson = new Node(4, 3, "grandson",null);
        Node son = new Node(5, 2, "son", null);
        // 构建出想要的树形数据
        List<Node> nodes = Lists.newArrayList(dennis, calm, daughter, son, grandson);
        List<Node> tree = build.buildTree(nodes);
        System.out.println(JSON.toJSONString(tree));

    }

    public List<Node> buildTree(List<Node> nodes){
    
    
        // 找到所有的子节点
        // 这一句有一点的复杂就是通过pid 不等于0来进行过滤,然后通过pid进行排序,然后存储起来
        Map<Integer, List<Node>> sub = nodes.stream().filter(node -> node.getPid() != 0).collect(Collectors.groupingBy(node->node.getPid()));
        // 通过子节点的id,从sub里面找到 node 的子节点
        nodes.forEach(node -> node.setChildren(sub.get(node.getId())));
        // 最后根据pid为0的值(相当与是根节点)输出
        return nodes.stream().filter(node -> node.getPid() == 0).collect(Collectors.toList());
    }
}

这里面有注释,你们大概看一下就会理解的,然后根据自己的业务,来修改这个代码,就是这里的buildTree代码

猜你喜欢

转载自blog.csdn.net/weixin_41288824/article/details/113155472