标签:override 树形结构 for empty else roo css oid while
数据库一般会提供树形结构的数据的查询函数,但是可能需要额外的配置,偶尔会因为设计上的失误,会导致写查询语句跟吃屎一样难受,数据量不大的情况,索性全查在代码中进行组合
import java.util.*; /** * @author css * @data 2019/6/24 10:33 */ public class Test<T> { private List<Node<T>> list = new ArrayList<>(); public class Node<T> { Object id; Object pid; String name; T t; Node<T> parent; LinkedList<Node<T>> children = new LinkedList<>(); @Override public String toString() { return "Node{" + "id=" + id + ", pid=" + pid + ", name=" + name + ", t=" + t + ", children=" + children + ‘}‘; } } public void add(Object id, Object pid, String name, T t) { Node<T> node = new Node<>(); node.id = id; node.pid = pid; node.name = name; node.t = t; list.add(node); } public Node<T> toTree(Object root) { for (Node<T> i : list) { for (Node<T> j : list) { if (i.id.equals(j.pid)) { i.children.add(j); j.parent = i; } } } for (Node<T> i : list) { if (root.equals(i.id)) { return i; } } return null; } public List<T> getParent(Node<T> node) { Node<T> p = node.parent; if (p == null) { return null; } else { List<T> list = new ArrayList<>(); while (p != null) { list.add(p.t); p = p.parent; } return list; } } public List<T> getChildren(Node<T> node) { LinkedList<Node<T>> c = new LinkedList<>(node.children); if (c.isEmpty()) { return null; } else { List<T> list = new ArrayList<>(c.size()); Node<T> e; while (!c.isEmpty()) { e = c.pollFirst(); list.add(e.t); if (!e.children.isEmpty()) { c.addAll(e.children); } } return list; } } public static void main(String[] args) { Test<String> t = new Test<>(); t.add(1, null, "1000", "node1"); t.add(2, 1, "1001", "node2"); t.add(3, 2, "1002", "node3"); t.add(4, 2, "1003", "node4"); Test.Node n = t.toTree(1); System.out.println(t.getChildren(n)); } }
标签:override 树形结构 for empty else roo css oid while
原文地址:https://www.cnblogs.com/chenss15060100790/p/11122154.html