有些时候,可以不使用递归处理父子结构的数据,比如一些菜单查询
废话不多说,直接上代码
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class App {
public static void main(String[] args) {
Node node1 = new Node(1, 0);
Node node2 = new Node(2, 1);
Node node3 = new Node(3, 1);
Node node4 = new Node(4, 2);
Node node5 = new Node(5, 3);
Node node6 = new Node(6, 5);
Node node7 = new Node(7, 5);
//这个地方是你查出来的父子结构数据
ArrayList nodes = new ArrayList<>();
nodes.add(node1);
nodes.add(node2);
nodes.add(node3);
nodes.add(node4);
nodes.add(node5);
nodes.add(node6);
nodes.add(node7);
//1、创建一个Map,将node id为key,node为value设置进去
Map cache = new HashMap<>();
for (Node node : nodes) {
cache.put(node.id,node);
}
//2、按照父子结构去设置children,并且找到parentId为0作为根节点
Node rootNode = null;
for (Node node : nodes) {
if (node.parentId == 0){
rootNode = node;
}else{
Node parent = cache.get(node.parentId);
if (parent.children == null){
parent.children = new ArrayList<>();
}
parent.children.add(node);
}
}
//得出一个拼接好父子结构的根节点
System.out.println(rootNode);
}
static class Node {
private int id;
private List children;
private int parentId;
public Node(int id, int parentId) {
this.id = id;
this.parentId = parentId;
}
}
}



