TreeNode基类
/**
* 树节点
*/
public abstract class TreeNode {
private String id;
private String parentId;
private String name;
private List children;
/**
* 是否为根节点
* 根据当前节点的parentId判断该节点是否为根节点
*
* @param parentId
* @return
*/
public abstract boolean isRoot(String parentId);
/**
* 子节点排序
*
* @param children
*/
public abstract void sortChildren(List children);
public void addChildNode(TreeNode treeNode) {
initChildList();
children.add(treeNode);
}
public void initChildList() {
if (children == null)
children = new ArrayList<>();
}
}
TreeHelper
/**
* 树生成helper
*/
public class TreeHelper {
public static <T extends TreeNode> void generateTree(Map<String, T> nodeMap) {
for (TreeNode node : nodeMap.values()) {
String parentId = node.getParentId();
if (node.isRoot(parentId)) {
continue;
}
if (nodeMap.containsKey(parentId)) {
TreeNode parentNode = nodeMap.get(parentId);
if (parentNode == null) {
throw new InternalException("生成树失败");
} else {
parentNode.addChildNode(node);
}
}
}
for (T t : nodeMap.values()) {
List children = t.getChildren();
if (children != null && children.size() > 0) {
t.sortChildren(children);
}
}
}
}
/**
* 具体树节点
*/
public class CostCenterNode extends TreeNode implements Comparable<CostCenterNode>{
private String code;
private int position;
private int employeeCount;
@Override
public boolean isRoot(String parentId) {
if (StringUtil.isEmpty(parentId)) {
return true;
}
return false;
}
@Override
public void sortChildren(List children) {
Collections.sort(children);
}
public CostCenterNode(CostCenterDO centerDO) {
this.setId(centerDO.getCostId());
this.setParentId(centerDO.getParentId());
this.setName(centerDO.getName());
this.setCode(centerDO.getCode());
this.setPosition(centerDO.getPosition());
this.setChildren(new ArrayList());
}
@Override
public int compareTo(CostCenterNode o) {
if (this.position > o.getPosition()) {
return 1;
} else {
return -1;
}
}
}