package com.fdkankan.agent.util; import com.fdkankan.agent.entity.AgentFrameworkEntity; import java.util.ArrayList; import java.util.List; public class AgentFrameworkTreeUtil { private List resultNodes = new ArrayList();//树形结构排序之后list内容 private List nodes = new ArrayList(); //传入list参数 public AgentFrameworkTreeUtil(List nodesList) {//通过构造函数初始化 for (AgentFrameworkEntity n : nodesList) { AgentFrameworkTree treeGrid = new AgentFrameworkTree(); treeGrid.setId(n.getId()); treeGrid.setName(n.getName()); // treeGrid.setIcon(n.getIcon()); if (n.getParentId() != null) { treeGrid.setParentId(n.getParentId()); } nodes.add(treeGrid); } } public AgentFrameworkTreeUtil() { } /** * 构建树形结构list * * @return 返回树形结构List列表 */ public List buildTree() { for (AgentFrameworkTree node : nodes) { Long id = node.getParentId(); if (id == null) {//通过循环一级节点 就可以通过递归获取二级以下节点 resultNodes.add(node);//添加一级节点 // node.setLevel(1); build(node, node.getLevel());//递归获取二级、三级、。。。节点 } } return resultNodes; } /** * 递归循环子节点 * * @param node 当前节点 */ private void build(AgentFrameworkTree node, int level) { List children = getChildren(node); if (!children.isEmpty()) {//如果存在子节点 node.setChildren(children); // level++; for (AgentFrameworkTree child : children) {//将子节点遍历加入返回值中 // child.setLevel(level); build(child, child.getLevel()); } } } /** * @param node * @return 返回 */ private List getChildren(AgentFrameworkTree node) { List children = new ArrayList(); Long id = node.getId(); for (AgentFrameworkTree child : nodes) { if (child.getParentId() != null && id.longValue() == child.getParentId().longValue()) {//如果id等于父id children.add(child);//将该节点加入循环列表中 } } return children; } public List buildTree(List all, List in) { for (AgentFrameworkEntity n : all) { AgentFrameworkTree treeGrid = new AgentFrameworkTree(); treeGrid.setId(n.getId()); treeGrid.setName(n.getName()); for (AgentFrameworkEntity nin : in) { if (nin.getId().equals(n.getId())) { treeGrid.setChecked(true); } } if (n.getParentId() != null) { treeGrid.setParentId(n.getParentId()); } nodes.add(treeGrid); } return buildTree(); } }