摘要: 本文主要介绍父子节点的List转 tree

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85

1、构建tree
2、从数据库查询list
3、将list转为tree

/**
* 树节点实体类
*/
@Data
public class TreeNode implements Serializable {

private static final long serialVersionUID = 7297611707550474985L;

private Integer id;

private Integer parentId;

private String name;

private List<TreeNode> children;

public TreeNode(String id, String name, String parentId) {
this.id = id;
this.parentId = parentId;
this.name = name;
}
}


// 根节点
private final Integer PARENT_ID=0;

/**
* 方式一:使用for循环实现
* @param treeList
* @return
*/
private List<TreeNode> loopToTree(List<TreeNode> treeList) {
List<TreeNode> resList = new ArrayList<>();

for (TreeNode parent : treeList) {
//添加根节点
if (PARENT_ID==parent.getParentId()) {
resList.add(parent);
}
//添加子节点
for (TreeNode child : treeList) {
if (child.getParentId() == parent.getId()) {
if (parent.getChildren() == null) {
parent.setChildren(new ArrayList<>());
}
parent.getChildren().add(child);
}
}
}
return resList;
}


/**
* 方式二:使用递归实现
* @param treeList
* @return
*/
private List<TreeNode> recursionToTree(List<TreeNode> treeList) {
List<TreeNode> resList = new ArrayList<>();
for (TreeNode parent : treeList) {
if (PARENT_ID==parent.getParentId()) {
resList.add(findChildren(parent, treeList));
}
}
return resList;
}

private TreeNode findChildren(TreeNode parent, List<TreeNode> treeList) {
for (TreeNode child : treeList) {
if (parent.getId().equals(child.getParentId())) {
if (parent.getChildren() == null) {
parent.setChildren(new ArrayList<>());
}
parent.getChildren().add(findChildren(child, treeList));
}
}
return parent;
}