Skip to content

Commit

Permalink
添加一些工具类
Browse files Browse the repository at this point in the history
  • Loading branch information
xkcoding committed Jan 19, 2018
1 parent cadda83 commit d70b361
Show file tree
Hide file tree
Showing 2 changed files with 184 additions and 0 deletions.
129 changes: 129 additions & 0 deletions spring-boot-demo-util/src/main/java/com/xkcoding/util/TreeUtil.java
Original file line number Diff line number Diff line change
@@ -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;

/**
* <p>
* 把一个list集合,里面的bean含有 parentId 转为树形式
* </p>
*
* @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<TreeNode> treeObjectList = Lists.newArrayList();

treeObjectList.add(new TreeNode(1, "总部", 0, "0", 1, "总部", Lists.<TreeNode>newArrayList()));
treeObjectList.add(new TreeNode(2, "技术部", 1, "0,1", 1, "技术部", Lists.<TreeNode>newArrayList()));
treeObjectList.add(new TreeNode(3, "软件部", 2, "0,1,2", 1, "软件部", Lists.<TreeNode>newArrayList()));
treeObjectList.add(new TreeNode(4, "硬件部", 2, "0,1,2", 2, "硬件部", Lists.<TreeNode>newArrayList()));
treeObjectList.add(new TreeNode(5, "维修部", 4, "0,1,2,4", 1, "维修部", Lists.<TreeNode>newArrayList()));
treeObjectList.add(new TreeNode(6, "采购部", 4, "0,1,2,4", 2, "采购部", Lists.<TreeNode>newArrayList()));

TreeUtil mt = new TreeUtil();

List<TreeNode> 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<TreeNode> getChildTreeNodes(List<TreeNode> list, Integer parentId) {
List<TreeNode> returnList = Lists.newArrayList();
for (Iterator<TreeNode> 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<TreeNode> list, TreeNode t) {
// 得到子节点列表
List<TreeNode> childList = getChildList(list, t);

t.setChildren(childList);
for (TreeNode tChild : childList) {
// 判断是否有子节点
if (hasChild(list, tChild)) {
Iterator<TreeNode> it = childList.iterator();
while (it.hasNext()) {
TreeNode n = it.next();
recursionFn(list, n);
}
}
}
}

/**
* 判断是否存在子节点
*
* @param list
* @param tChild
* @return
*/
private boolean hasChild(List<TreeNode> list, TreeNode tChild) {
return getChildList(list, tChild).size() > 0;
}

/**
* 获得子节点列表
*
* @param list
* @param t
* @return
*/
private List<TreeNode> getChildList(List<TreeNode> list, TreeNode t) {
List<TreeNode> tlist = Lists.newArrayList();
Iterator<TreeNode> it = list.iterator();
while (it.hasNext()) {
TreeNode n = it.next();
if (n.getParentId().equals(t.getId())) {
tlist.add(n);
}
}
return tlist;
}

}
Original file line number Diff line number Diff line change
@@ -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;

/**
* <p>
* 树节点
* </p>
*
* @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<TreeNode> children = Lists.newArrayList();
}

0 comments on commit d70b361

Please sign in to comment.