Recursively spanning tree structures in Java
1. Prepare entity objects
public class TreeNode{ private int id; private int pid; private String name; private String content; private List<TreeNode> children; public TreeNode() { } public TreeNode(int id, int pid, String name, String content) { = id; = pid; = name; = content; } public int getId() { return id; } public void setId(int id) { = id; } public int getPid() { return pid; } public void setPid(int pid) { = pid; } public String getName() { return name; } public void setName(String name) { = name; } public String getContent() { return content; } public void setContent(String content) { = content; } public List<TreeNode> getChildren(){ return children; } public void setChildren(List<TreeNode> children){ = children; } @Override public String toString() { return "TreeNode{" + ", p, name='" + name + '\'' + ", content='" + content + '\'' + '}'; } }
2. Prepare test data
//Methods for generating test datapublic static List<TreeNode> generateList(){ List<TreeNode> list = new ArrayList<>(); TreeNode treeModel1 = new TreeNode(1,0,"System Management",getRandomStr()); TreeNode treeModel2 = new TreeNode(11,1,"User Management",getRandomStr()); TreeNode treeModel3 = new TreeNode(111,11,"User Add",getRandomStr()); TreeNode treeModel4 = new TreeNode(2,0,"Permission Management",getRandomStr()); TreeNode treeModel5 = new TreeNode(21,2,"Account Management",getRandomStr()); TreeNode treeModel6 = new TreeNode(221,2,"Role Management",getRandomStr()); (treeModel1); (treeModel2); (treeModel3); (treeModel4); (treeModel5); (treeModel6); return list; } //I wrote a randomly generated string method with 26 lowercase letterspublic static String getRandomStr(){ StringBuilder ret= new StringBuilder(); for (int i = 0; i < 6; i++) { int num=(int)(()*26+97); ((char) num); } return (); }
3. Construct a tree structure recursive function
/** * Spanning tree * @param list Pending data collection * @param pid The top-most parent id */ public static List<TreeNode> createTree(List<TreeNode> list,int pid){ //Filter out all parent nodes according to parent id List<TreeNode> tree = ().filter(e-> pid == ()).collect(()); //Transfuse all parent nodes and add all child nodes belonging to the node's children property under the node's children property for (TreeNode node: tree) { int id = (); //Filter out all child nodes belonging to this node List<TreeNode> cList = ().filter(e-> id == ()).collect(()); //Judge whether there is a child node. If the child node has data, use the id of the child node as a pid to continue recursively processing to the lower level. if(!(cList)){ createTree(list,id); (cList); } } return tree; }
4. Test
public static void main(String[] args) throws Exception { List<TreeNode> list = generateList(); (::println); List<TreeNode> tree = createTree(list,0); ((tree)); }
5. Output result
TreeNode{id=1, pid=0, name='System Management', content='vyzjpq'}
TreeNode{id=11, pid=1, name='user management', content='qwbiex'}
TreeNode{id=111, pid=11, name='User added', content='zuyuth'}
TreeNode{id=2, pid=0, name='Permission Management', content='ctgevw'}
TreeNode{id=21, pid=2, name='Account Management', content='ulgvdx'}
TreeNode{id=221, pid=2, name='role management', content='fzxufe'}
[{"children":[{"children":[{"content":"zuyuth","id":111,"name":"user addition","pid":11}],"content":"qwbiex","id":11,"name":"user management","pid":1}],"content":"vyzjpq","id":1,"name":"system management"," pid":0},{"children":[{"content":"ulgvdx","id":21,"name":"account management","pid":2},{"content":"fzxufe","id":221,"name":"role management","pid":2}],"content":"ctgevw","id":2,"name":"Permission management","pid":0}]
Summarize
The above is personal experience. I hope you can give you a reference and I hope you can support me more.