diff --git a/spring-boot-demo-util/src/main/java/com/xkcoding/util/TreeUtil.java b/spring-boot-demo-util/src/main/java/com/xkcoding/util/TreeUtil.java
new file mode 100644
index 000000000..ea428f658
--- /dev/null
+++ b/spring-boot-demo-util/src/main/java/com/xkcoding/util/TreeUtil.java
@@ -0,0 +1,129 @@
+package com.xkcoding.util;
+
+import com.google.common.collect.Lists;
+import com.xiaoleilu.hutool.json.JSONUtil;
+import com.xkcoding.util.domain.TreeNode;
+
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ *
+ * 把一个list集合,里面的bean含有 parentId 转为树形式
+ *
+ *
+ * @package: com.xkcoding.util
+ * @description: 把一个list集合, 里面的bean含有 parentId 转为树形式
+ * @author: yangkai.shen
+ * @date: Created in 2017/12/7 上午10:26
+ * @copyright: Copyright (c) 2017
+ * @version: 0.0.1
+ * @modified: yangkai.shen
+ */
+public class TreeUtil {
+
+ /**
+ * 测试层级
+ *
+ * @param args
+ */
+ public static void main(String[] args) {
+ long start = System.currentTimeMillis();
+
+ List treeObjectList = Lists.newArrayList();
+
+ treeObjectList.add(new TreeNode(1, "总部", 0, "0", 1, "总部", Lists.newArrayList()));
+ treeObjectList.add(new TreeNode(2, "技术部", 1, "0,1", 1, "技术部", Lists.newArrayList()));
+ treeObjectList.add(new TreeNode(3, "软件部", 2, "0,1,2", 1, "软件部", Lists.newArrayList()));
+ treeObjectList.add(new TreeNode(4, "硬件部", 2, "0,1,2", 2, "硬件部", Lists.newArrayList()));
+ treeObjectList.add(new TreeNode(5, "维修部", 4, "0,1,2,4", 1, "维修部", Lists.newArrayList()));
+ treeObjectList.add(new TreeNode(6, "采购部", 4, "0,1,2,4", 2, "采购部", Lists.newArrayList()));
+
+ TreeUtil mt = new TreeUtil();
+
+ List ns = mt.getChildTreeNodes(treeObjectList, 0);
+
+ for (TreeNode m : ns) {
+ System.out.println(m);
+ System.out.println(JSONUtil.parseObj(m, false).toStringPretty());
+ }
+
+ long end = System.currentTimeMillis();
+
+ System.out.println("用时:" + (end - start) + "ms");
+ }
+
+ /**
+ * 根据父节点 id 获取所有子节点
+ *
+ * @param list 列表
+ * @param parentId 父节点 id
+ * @return 所有子节点
+ */
+ public List getChildTreeNodes(List list, Integer parentId) {
+ List returnList = Lists.newArrayList();
+ for (Iterator iterator = list.iterator(); iterator.hasNext(); ) {
+ TreeNode t = iterator.next();
+ // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
+ if (t.getParentId().equals(parentId)) {
+ recursionFn(list, t);
+ returnList.add(t);
+ }
+ }
+ return returnList;
+ }
+
+ /**
+ * 递归列表
+ *
+ * @param list 列表
+ * @param t 树节点
+ */
+ private void recursionFn(List list, TreeNode t) {
+ // 得到子节点列表
+ List childList = getChildList(list, t);
+
+ t.setChildren(childList);
+ for (TreeNode tChild : childList) {
+ // 判断是否有子节点
+ if (hasChild(list, tChild)) {
+ Iterator it = childList.iterator();
+ while (it.hasNext()) {
+ TreeNode n = it.next();
+ recursionFn(list, n);
+ }
+ }
+ }
+ }
+
+ /**
+ * 判断是否存在子节点
+ *
+ * @param list
+ * @param tChild
+ * @return
+ */
+ private boolean hasChild(List list, TreeNode tChild) {
+ return getChildList(list, tChild).size() > 0;
+ }
+
+ /**
+ * 获得子节点列表
+ *
+ * @param list
+ * @param t
+ * @return
+ */
+ private List getChildList(List list, TreeNode t) {
+ List tlist = Lists.newArrayList();
+ Iterator it = list.iterator();
+ while (it.hasNext()) {
+ TreeNode n = it.next();
+ if (n.getParentId().equals(t.getId())) {
+ tlist.add(n);
+ }
+ }
+ return tlist;
+ }
+
+}
diff --git a/spring-boot-demo-util/src/main/java/com/xkcoding/util/domain/TreeNode.java b/spring-boot-demo-util/src/main/java/com/xkcoding/util/domain/TreeNode.java
new file mode 100644
index 000000000..7d6c969b1
--- /dev/null
+++ b/spring-boot-demo-util/src/main/java/com/xkcoding/util/domain/TreeNode.java
@@ -0,0 +1,55 @@
+package com.xkcoding.util.domain;
+
+import com.google.common.collect.Lists;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ *
+ * 树节点
+ *
+ *
+ * @package: com.xkcoding.util.domain
+ * @description: 树节点
+ * @author: yangkai.shen
+ * @date: Created in 2017/12/7 上午10:27
+ * @copyright: Copyright (c) 2017
+ * @version: 0.0.1
+ * @modified: yangkai.shen
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class TreeNode {
+ /**
+ * id 编号
+ */
+ private Integer id;
+ /**
+ * 节点名称
+ */
+ private String name;
+ /**
+ * 父节点 id
+ */
+ private Integer parentId;
+ /**
+ * 层级
+ */
+ private String level;
+ /**
+ * 当前层级顺序
+ */
+ private Integer seq;
+ /**
+ * 备注
+ */
+ private String remark;
+ /**
+ * 子节点列表
+ */
+ private List children = Lists.newArrayList();
+}