1、创建实体对象
public class TreeNode {private String id;private String pid;private String name;private List<TreeNode> children;public TreeNode(String id,String pid,String name){this.id = id;this.pid = pid;this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getPid() {return pid;}public void setPid(String pid) {this.pid = pid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public List<TreeNode> getChildren() {return children;}public void setChildren(List<TreeNode> children) {this.children = children;}}
2、创建集合转换树工具类
public class TreeVo {private List<TreeNode> listJXKHTreeNode=new ArrayList<TreeNode>();private List<TreeNode> lstRootJXKHTreeNode=new ArrayList<TreeNode>();private int iMaxLevel=1;public List<TreeNode> getListJXKHTreeNode() {return listJXKHTreeNode;}public void setListJXKHTreeNode(List<TreeNode> listJXKHTreeNode) {this.listJXKHTreeNode = listJXKHTreeNode;}public List<TreeNode> getLstRootJXKHTreeNode() {return lstRootJXKHTreeNode;}public void setLstRootJXKHTreeNode(List<TreeNode> lstRootJXKHTreeNode) {this.lstRootJXKHTreeNode = lstRootJXKHTreeNode;}public int getiMaxLevel() {return iMaxLevel;}public void setiMaxLevel(int iMaxLevel) {this.iMaxLevel = iMaxLevel;}public static List<TreeNode> listGetStree(List<TreeNode> list) {List<TreeNode> treeList = new ArrayList<TreeNode>();for (TreeNode tree : list) {//找到根if (tree.getPid() == null) {treeList.add(tree);}//找到子for (TreeNode treeNode : list) {if(treeNode.getPid()!=null){if (treeNode.getPid().equals(tree.getId())) {if (tree.getChildren() == null) {tree.setChildren(new ArrayList<TreeNode>());}tree.getChildren().add(treeNode);}}}}return treeList;}//将list转换为树public List<TreeNode> MakeTreeByList(List<TreeNode> listData ){if(listData != null) {for(int i=0;i<listData.size();i++){TreeNode mapObject = listData.get(i);String strAPID = mapObject.getPid() == null ? "" : mapObject.getPid();Boolean IsHaveParent=false;//找根节点for(int j=0;j<listData.size();j++){TreeNode mapObjectB=listData.get(j);String strBID=mapObjectB.getId();if(strAPID.equals(strBID)){IsHaveParent=true;break;}}//如果没有父级节点则为根节点if(!IsHaveParent){lstRootJXKHTreeNode.add(mapObject);}}}//找上下级关系for(int i=0;i<listData.size();i++){for(int j=0;j<listData.size();j++){if(listData.get(i).getId().equals(listData.get(j).getPid())){if(listData.get(i).getChildren()==null){listData.get(i).setChildren(new ArrayList<TreeNode>());}listData.get(i).getChildren().add(listData.get(j));}}}return lstRootJXKHTreeNode;}
}
3、测试实例
public class TestListToTree {public static void main(String[] args) {List<TreeNode> treeNodeList = new ArrayList<>();treeNodeList.add(new TreeNode("1","0","人力资源部"));treeNodeList.add(new TreeNode("12","1","人一"));treeNodeList.add(new TreeNode("12","1","人二"));treeNodeList.add(new TreeNode("14","1","人三"));treeNodeList.add(new TreeNode("11","1","人四"));treeNodeList.add(new TreeNode("2","0","财务资源部"));treeNodeList.add(new TreeNode("21","2","财一"));treeNodeList.add(new TreeNode("22","2","财二"));treeNodeList.add(new TreeNode("23","2","财三"));TreeVo treeVo = new TreeVo();List<TreeNode> treeNodes = treeVo.MakeTreeByList(treeNodeList);for (TreeNode treeNode : treeNodes) {System.out.println(treeNode.getName());}}
}
运行结果: