zoukankan      html  css  js  c++  java
  • JAVA 快速构建树形结构

    • JDK 1.8+
    • Node 中pid 为 0 的是根节点
    public class Node {
        private int id;
        private int pid;
        private String name;
        private List<Node> sub = new ArrayList<>();
        public Node(int id, int pid) {
            this.id = id;
            this.pid = pid;
        }
    
        public Node(int id, int pid, String name) {
            this(id, pid);
            this.name = name;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public int getPid() {
            return pid;
        }
    
        public void setPid(int pid) {
            this.pid = pid;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public List<Node> getSub() {
            return sub;
        }
    
        public void setSub(List<Node> sub) {
            this.sub = sub;
        }
    }
    public class TreeUtil {
        public static List<Node> buildTree(List<Node> nodes) {
            Map<Integer, List<Node>> sub = nodes.stream().filter(node -> node.getPid() != 0).collect(Collectors.groupingBy(node -> node.getPid()));
            nodes.forEach(node -> node.setSub(sub.get(node.getId())));
            return nodes.stream().filter(node -> node.getPid() == 0).collect(Collectors.toList());
        }
    }
    public class Main {
        public static void main(String[] args) {
            Node dennis = new Node(1, 0, "dennis");
            Node calm = new Node(2, 0, "calm");
            Node daughter = new Node(3, 1, "daughter");
            Node grandson = new Node(4, 3, "grandson");
            Node son = new Node(5, 2, "son");
            List<Node> nodes = Lists.newArrayList(dennis, calm, daughter, son, grandson);
            List<Node> tree = TreeUtil.buildTree(nodes);
            System.out.println(JSON.toJSONString(tree));
        }
    }
    [
      {
        "id": 1,
        "name": "dennis",
        "pid": 0,
        "sub": [
          {
            "id": 3,
            "name": "daughter",
            "pid": 1,
            "sub": [
              {
                "id": 4,
                "name": "grandson",
                "pid": 3
              }
            ]
          }
        ]
      },
      {
        "id": 2,
        "name": "calm",
        "pid": 0,
        "sub": [
          {
            "id": 5,
            "name": "son",
            "pid": 2
          }
        ]
      }
    ]
  • 相关阅读:
    jdbc连接2(不可以注入)
    大白dmeo (转的)
    管家婆系统
    RMQ求最值
    Codeforces 837E Vasya's Function 数论 找规律
    Codeforces 837D
    poj 1655 找树的重心
    HDU 4055 Number String 计数DP
    Summer training round2 #7 (Training #23)
    Summer training round2 #6 (Training #22)
  • 原文地址:https://www.cnblogs.com/huangjinyong/p/12383315.html
Copyright © 2011-2022 走看看