2 changed files with 111 additions and 0 deletions
@ -0,0 +1,39 @@ |
|||
package com.elink.esua.epdc.commons.tools.utils; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
public class TreeNodeNew<T> implements Serializable { |
|||
private static final long serialVersionUID = 1L; |
|||
private String id; |
|||
private String pid; |
|||
private List<T> children = new ArrayList(); |
|||
|
|||
public TreeNodeNew() { |
|||
} |
|||
|
|||
public String getId() { |
|||
return this.id; |
|||
} |
|||
|
|||
public void setId(String id) { |
|||
this.id = id; |
|||
} |
|||
|
|||
public String getPid() { |
|||
return this.pid; |
|||
} |
|||
|
|||
public void setPid(String pid) { |
|||
this.pid = pid; |
|||
} |
|||
|
|||
public List<T> getChildren() { |
|||
return this.children; |
|||
} |
|||
|
|||
public void setChildren(List<T> children) { |
|||
this.children = children; |
|||
} |
|||
} |
@ -0,0 +1,72 @@ |
|||
package com.elink.esua.epdc.commons.tools.utils; |
|||
|
|||
import com.elink.esua.epdc.commons.tools.validator.AssertUtils; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.LinkedHashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* 树形结构工具类,如:菜单、部门等 |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
* @since 1.0.0 |
|||
*/ |
|||
public class TreeUtilsNew { |
|||
|
|||
/** |
|||
* 根据pid,构建树节点 |
|||
*/ |
|||
public static <T extends TreeNodeNew> List<T> build(List<T> treeNodes, Long pid) { |
|||
//pid不能为空
|
|||
AssertUtils.isNull(pid, "pid"); |
|||
|
|||
List<T> treeList = new ArrayList<>(); |
|||
for (T treeNode : treeNodes) { |
|||
if (pid.equals(treeNode.getPid())) { |
|||
treeList.add(findChildren(treeNodes, treeNode)); |
|||
} |
|||
} |
|||
|
|||
return treeList; |
|||
} |
|||
|
|||
/** |
|||
* 查找子节点 |
|||
*/ |
|||
private static <T extends TreeNodeNew> T findChildren(List<T> treeNodes, T rootNode) { |
|||
for (T treeNode : treeNodes) { |
|||
if (rootNode.getId().equals(treeNode.getPid())) { |
|||
rootNode.getChildren().add(findChildren(treeNodes, treeNode)); |
|||
} |
|||
} |
|||
return rootNode; |
|||
} |
|||
|
|||
/** |
|||
* 构建树节点 |
|||
*/ |
|||
public static <T extends TreeNodeNew> List<T> build(List<T> treeNodes) { |
|||
List<T> result = new ArrayList<>(); |
|||
|
|||
//list转map
|
|||
Map<String, T> nodeMap = new LinkedHashMap<>(treeNodes.size()); |
|||
for (T treeNode : treeNodes) { |
|||
nodeMap.put(treeNode.getId(), treeNode); |
|||
} |
|||
|
|||
for (T node : nodeMap.values()) { |
|||
T parent = nodeMap.get(node.getPid()); |
|||
if (parent != null && !(node.getId().equals(parent.getId()))) { |
|||
parent.getChildren().add(node); |
|||
continue; |
|||
} |
|||
|
|||
result.add(node); |
|||
} |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
Loading…
Reference in new issue