1 返回的数据类
import java.util.List; public class EntityDo { private Integer id; private String parent_id; private String name; private List<EntityDo> children; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getParent_id() { return parent_id; } public void setParent_id(String parent_id) { this.parent_id = parent_id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<EntityDo> getChildren() { return children; } public void setChildren(List<EntityDo> children) { this.children = children; } }
2 主要实现类和测试类
import org.apache.commons.lang3.StringUtils; import java.util.*; import java.util.stream.Collectors; public class TreeUtil { /** * 获取组织机构树 */ public static List<EntityDo> getTreeGroup( List<EntityDo> entityDoList) { // 最终返回的数据 List<EntityDo> treeList = new ArrayList<>(); // entities 获取的原始数据 List<EntityDo> entities = entityDoList; for (EntityDo entity:entities) { EntityDo menuEntity = new EntityDo(); menuEntity.setId(entity.getId()); menuEntity.setName(entity.getName()); menuEntity.setParent_id(entity.getParent_id()); List<EntityDo> child=new ArrayList<>(); if(StringUtils.isEmpty(entity.getParent_id())){ // 调用获取子节点及子节点下的children数据 child=menuChild(entity.getId().toString(),entities); } menuEntity.setChildren(child); treeList.add(menuEntity); } // 过滤数据 过滤掉非根节点数据 treeList=treeList.stream().filter(o->StringUtils.isEmpty(o.getParent_id().toString())).collect(Collectors.toList()); return treeList; } /** * 获取子节点及子节点下的children数据 * */ private static List<EntityDo> menuChild(String pid, List<EntityDo> entities) { List<EntityDo> child = new ArrayList<>(); for (EntityDo entity:entities) { EntityDo menu = new EntityDo(); if (entity.getParent_id()!=null && pid.equals(entity.getParent_id())){ menu.setId(entity.getId()); menu.setName(entity.getName()); menu.setParent_id(entity.getParent_id()); menu.setChildren(menuChild(entity.getId().toString(),entities)); child.add(menu); } } return child; }
public static void main(String[] args) { List<EntityDo> entityDos=new ArrayList<>(); EntityDo entityDo=new EntityDo(); entityDo.setId(1); entityDo.setParent_id(""); entityDo.setName("董事长"); entityDos.add(entityDo); entityDo=new EntityDo(); entityDo.setId(2); entityDo.setParent_id("1"); entityDo.setName("总经理"); entityDos.add(entityDo); entityDo=new EntityDo(); entityDo.setId(3); entityDo.setParent_id("2"); entityDo.setName("设计部"); entityDos.add(entityDo); entityDo=new EntityDo(); entityDo.setId(4); entityDo.setParent_id("2"); entityDo.setName("工程技术"); entityDos.add(entityDo); entityDo=new EntityDo(); entityDo.setId(5); entityDo.setParent_id("2"); entityDo.setName("财务部"); entityDos.add(entityDo); entityDo=new EntityDo(); entityDo.setId(6); entityDo.setParent_id("2"); entityDo.setName("经营部"); entityDos.add(entityDo); entityDo=new EntityDo(); entityDo.setId(7); entityDo.setParent_id("3"); entityDo.setName("项目部1"); entityDos.add(entityDo); entityDo=new EntityDo(); entityDo.setId(8); entityDo.setParent_id("3"); entityDo.setName("项目部2"); entityDos.add(entityDo); entityDo=new EntityDo(); entityDo.setId(8); entityDo.setParent_id("7"); entityDo.setName("材料员"); entityDos.add(entityDo); entityDo=new EntityDo(); entityDo.setId(9); entityDo.setParent_id("7"); entityDo.setName("技术员"); entityDos.add(entityDo); entityDo=new EntityDo(); entityDo.setId(10); entityDo.setParent_id("7"); entityDo.setName("工长"); entityDos.add(entityDo); entityDo=new EntityDo(); entityDo.setId(11); entityDo.setParent_id("7"); entityDo.setName("安全员"); entityDos.add(entityDo); List<EntityDo> list=getTreeGroup(entityDos); System.out.println(list.size()); } }