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());
}
}
}
运行结果: