Skip to content

Commit d70b361

Browse files
committed
添加一些工具类
1 parent cadda83 commit d70b361

File tree

2 files changed

+184
-0
lines changed

2 files changed

+184
-0
lines changed
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
package com.xkcoding.util;
2+
3+
import com.google.common.collect.Lists;
4+
import com.xiaoleilu.hutool.json.JSONUtil;
5+
import com.xkcoding.util.domain.TreeNode;
6+
7+
import java.util.Iterator;
8+
import java.util.List;
9+
10+
/**
11+
* <p>
12+
* 把一个list集合,里面的bean含有 parentId 转为树形式
13+
* </p>
14+
*
15+
* @package: com.xkcoding.util
16+
* @description: 把一个list集合, 里面的bean含有 parentId 转为树形式
17+
* @author: yangkai.shen
18+
* @date: Created in 2017/12/7 上午10:26
19+
* @copyright: Copyright (c) 2017
20+
* @version: 0.0.1
21+
* @modified: yangkai.shen
22+
*/
23+
public class TreeUtil {
24+
25+
/**
26+
* 测试层级
27+
*
28+
* @param args
29+
*/
30+
public static void main(String[] args) {
31+
long start = System.currentTimeMillis();
32+
33+
List<TreeNode> treeObjectList = Lists.newArrayList();
34+
35+
treeObjectList.add(new TreeNode(1, "总部", 0, "0", 1, "总部", Lists.<TreeNode>newArrayList()));
36+
treeObjectList.add(new TreeNode(2, "技术部", 1, "0,1", 1, "技术部", Lists.<TreeNode>newArrayList()));
37+
treeObjectList.add(new TreeNode(3, "软件部", 2, "0,1,2", 1, "软件部", Lists.<TreeNode>newArrayList()));
38+
treeObjectList.add(new TreeNode(4, "硬件部", 2, "0,1,2", 2, "硬件部", Lists.<TreeNode>newArrayList()));
39+
treeObjectList.add(new TreeNode(5, "维修部", 4, "0,1,2,4", 1, "维修部", Lists.<TreeNode>newArrayList()));
40+
treeObjectList.add(new TreeNode(6, "采购部", 4, "0,1,2,4", 2, "采购部", Lists.<TreeNode>newArrayList()));
41+
42+
TreeUtil mt = new TreeUtil();
43+
44+
List<TreeNode> ns = mt.getChildTreeNodes(treeObjectList, 0);
45+
46+
for (TreeNode m : ns) {
47+
System.out.println(m);
48+
System.out.println(JSONUtil.parseObj(m, false).toStringPretty());
49+
}
50+
51+
long end = System.currentTimeMillis();
52+
53+
System.out.println("用时:" + (end - start) + "ms");
54+
}
55+
56+
/**
57+
* 根据父节点 id 获取所有子节点
58+
*
59+
* @param list 列表
60+
* @param parentId 父节点 id
61+
* @return 所有子节点
62+
*/
63+
public List<TreeNode> getChildTreeNodes(List<TreeNode> list, Integer parentId) {
64+
List<TreeNode> returnList = Lists.newArrayList();
65+
for (Iterator<TreeNode> iterator = list.iterator(); iterator.hasNext(); ) {
66+
TreeNode t = iterator.next();
67+
// 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
68+
if (t.getParentId().equals(parentId)) {
69+
recursionFn(list, t);
70+
returnList.add(t);
71+
}
72+
}
73+
return returnList;
74+
}
75+
76+
/**
77+
* 递归列表
78+
*
79+
* @param list 列表
80+
* @param t 树节点
81+
*/
82+
private void recursionFn(List<TreeNode> list, TreeNode t) {
83+
// 得到子节点列表
84+
List<TreeNode> childList = getChildList(list, t);
85+
86+
t.setChildren(childList);
87+
for (TreeNode tChild : childList) {
88+
// 判断是否有子节点
89+
if (hasChild(list, tChild)) {
90+
Iterator<TreeNode> it = childList.iterator();
91+
while (it.hasNext()) {
92+
TreeNode n = it.next();
93+
recursionFn(list, n);
94+
}
95+
}
96+
}
97+
}
98+
99+
/**
100+
* 判断是否存在子节点
101+
*
102+
* @param list
103+
* @param tChild
104+
* @return
105+
*/
106+
private boolean hasChild(List<TreeNode> list, TreeNode tChild) {
107+
return getChildList(list, tChild).size() > 0;
108+
}
109+
110+
/**
111+
* 获得子节点列表
112+
*
113+
* @param list
114+
* @param t
115+
* @return
116+
*/
117+
private List<TreeNode> getChildList(List<TreeNode> list, TreeNode t) {
118+
List<TreeNode> tlist = Lists.newArrayList();
119+
Iterator<TreeNode> it = list.iterator();
120+
while (it.hasNext()) {
121+
TreeNode n = it.next();
122+
if (n.getParentId().equals(t.getId())) {
123+
tlist.add(n);
124+
}
125+
}
126+
return tlist;
127+
}
128+
129+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.xkcoding.util.domain;
2+
3+
import com.google.common.collect.Lists;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
8+
import java.util.List;
9+
10+
/**
11+
* <p>
12+
* 树节点
13+
* </p>
14+
*
15+
* @package: com.xkcoding.util.domain
16+
* @description: 树节点
17+
* @author: yangkai.shen
18+
* @date: Created in 2017/12/7 上午10:27
19+
* @copyright: Copyright (c) 2017
20+
* @version: 0.0.1
21+
* @modified: yangkai.shen
22+
*/
23+
@Data
24+
@AllArgsConstructor
25+
@NoArgsConstructor
26+
public class TreeNode {
27+
/**
28+
* id 编号
29+
*/
30+
private Integer id;
31+
/**
32+
* 节点名称
33+
*/
34+
private String name;
35+
/**
36+
* 父节点 id
37+
*/
38+
private Integer parentId;
39+
/**
40+
* 层级
41+
*/
42+
private String level;
43+
/**
44+
* 当前层级顺序
45+
*/
46+
private Integer seq;
47+
/**
48+
* 备注
49+
*/
50+
private String remark;
51+
/**
52+
* 子节点列表
53+
*/
54+
private List<TreeNode> children = Lists.newArrayList();
55+
}

0 commit comments

Comments
 (0)