java递归将list转为tree树结构
实体类
public class Main {
private String id;
private String name;
private String pid;
private List<Main> children;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public List<Main> getChildren() {
return children;
}
public void setChildren(List<Main> children) {
this.children = children;
}
public Main(String id, String name, String pid, List<Main> children) {
this.id = id;
this.name = name;
this.pid = pid;
this.children = children;
}
}
递归实现(传递list集合,和第一层的父节点)
public static List<Main> getFather(List<Main> list,String pId){
List<Main> newlist=new ArrayList<Main>();
List<Main> newlist1 = new ArrayList<Main>();
for (Iterator<Main> main = list.iterator(); main.hasNext();) {
Main man=main.next();
if (man.getPid().equals(pId)){
newlist1=getFather(list,man.getId());
if (newlist1.isEmpty()){
newlist.add(man);
}else {
man.setChildren(newlist1);
newlist.add(man);
}
}
}
return newlist;
}
方法调用
public static void main(String[] args) {
List<Main> list=new ArrayList<Main>();
list.add(new Main("1","第一个","0",new ArrayList<>()));
list.add(new Main("2","第一个","0",new ArrayList<>()));
list.add(new Main("3","第一个节点","1",new ArrayList<>()));
list.add(new Main("4","第三个子节点","3",new ArrayList<>()));
list.add(new Main("5","测试5","1",new ArrayList<>()));
list.add(new Main("6","测试6","9",new ArrayList<>()));
list.add(new Main("7","测试7","1",new ArrayList<>()));
list.add(new Main("8","测试8","9",new ArrayList<>()));
list.add(new Main("9","测试9","0",new ArrayList<>()));
list.add(new Main("10","测试10","0",new ArrayList<>()));
list.add(new Main("11","测试11","7",new ArrayList<>()));
List<Main> newlist=getFather(list,"0");
for (int i = 0; i <newlist.size() ; i++) {
System.out.println(newlist.get(i));
}
}
思路总结:节点放入时先放最后一层,最后一层完全放完再放倒数第二层,依次进行.