1.Java具体实现步骤
1.1 实体类结构
package test;
import lombok.Data;
import java.util.List;
@Data
class TreeNode {
private Integer id;
private String name;
private Integer parentId;
private List<TreeNode> children;
public TreeNode(Integer id, String name, Integer parentId) {
this.id = id;
this.name = name;
this.parentId = parentId;
}
}
1.2 递归构建无限级树方法
package test;
import java.util.ArrayList;
import java.util.List;
public class TreeBuilder {
public static List<TreeNode> buildTree(List<TreeNode> nodeList, Integer parentId) {
List<TreeNode> tree = new ArrayList<>();
for (TreeNode node : nodeList) {
Integer id = node.getId();
Integer pid = node.getParentId();
if (parentId.equals(pid)) {
List<TreeNode> children = buildTree(nodeList, id);
node.setChildren(children);
tree.add(node);
}
}
return tree;
}
}
1.3 测试代码
package test;
import cn.hutool.json.JSONUtil;
import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.List;
@SpringBootTest
public class TreeTest {
@Test
public void testTree(){
TreeBuilder treeBuilder = new TreeBuilder();
List<TreeNode> nodes = new ArrayList<>();
nodes.add(new TreeNode(1, "Node 1", 0));
nodes.add(new TreeNode(2, "Node 2", 1));
nodes.add(new TreeNode(3, "Node 3", 1));
nodes.add(new TreeNode(4, "Node 4", 2));
nodes.add(new TreeNode(5, "Node 5", 2));
List<TreeNode> treeNodes = TreeBuilder.buildTree(nodes, 0);
System.out.println("treeNodes = " + JSONUtil.toJsonStr(treeNodes));
}
}
1.4 输出效果
{
"id": 1,
"name": "Node 1",
"parentId": 0,
"children": [
{
"id": 2,
"name": "Node 2",
"parentId": 1,
"children": [
{
"id": 4,
"name": "Node 4",
"parentId": 2,
"children": []
},
{
"id": 5,
"name": "Node 5",
"parentId": 2,
"children": []
}
]
},
{
"id": 3,
"name": "Node 3",
"parentId": 1,
"children": []
}
]
}