实体类
import java.util.List;
public class user
{
private Integer id;
private Integer pId;
private String name;
private List<user> child;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getpId() {
return pId;
}
public void setpId(Integer pId) {
this.pId = pId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<user> getChild() {
return child;
}
public void setChild(List<user> child) {
this.child = child;
}
public user(Integer id, Integer pId, String name, List<user> child) {
this.id = id;
this.pId = pId;
this.name = name;
this.child = child;
}
@Override
public String toString() {
return "user{" +
"id=" + id +
", pId=" + pId +
", name='" + name + '\'' +
", child=" + child +
'}';
}
}
调用方法
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collector;
import java.util.stream.Collectors;
public class test
{
public static void main(String[] args) {
ArrayList<user> users = new ArrayList<>();
users.add(new user(1,0,"个位数",null));
users.add(new user(10,0,"十位位数",null));
users.add(new user(100,0,"百位数",null));
users.add(new user(2,1,"个位数",null));
users.add(new user(3,2,"个位数",null));
users.add(new user(5,2,"个位数",null));
users.add(new user(4,3,"个位数",null));
users.add(new user(11,10,"十位数",null));
users.add(new user(111,100,"百位数",null));
Map<Integer, List<user>> collect = users.stream().collect(Collectors.groupingBy(user::getpId));
ArrayList<user> newusers = new ArrayList<>();
List<user> recursion = recursion(users, collect,newusers);
recursion.stream().forEach(System.out::println);
}
public static List<user> recursion(List<user> users,Map<Integer, List<user>> collect,ArrayList<user> newusers)
{
for (user user : users) {
//找到全部父节点先放到list中
if (user.getpId()==0){
newusers.add(user);
}
if (collect.get(user.getId()) != null){
//把找到的子节点list设置给父节点
user.setChild(collect.get(user.getId()));
//找到的子节点list,map数据源,新数组-子节点不操作(递归子节点list)
recursion(user.getChild(),collect,newusers);
}
}
return newusers;
}
}