使用java代码返回树形结构的damo
首先我们需要了解的是返回树形结构使用到的算法是递归算法,废话就不多说了下面直接上代码
这是新建用来存放实体类的
@Data
public class MenuTree {
private String id;
private String parentId;
private String name;
private List children;
}
这是用来测试的main执行方法
public static void main(String[] args) {
ArrayList<MenuTree> dtoList=new ArrayList<MenuTree>();
MenuTree m1=new MenuTree();
m1.setId("100");
m1.setName("商务科技");
dtoList.add(m1);
MenuTree m2=new MenuTree();
m2.setId("101");
m2.setParentId("100");
m2.setName("深圳总公司");
dtoList.add(m2);
MenuTree m3=new MenuTree();
m3.setId("102");
m3.setParentId("100");
m3.setName("长沙总公司");
dtoList.add(m3);
MenuTree m4=new MenuTree();
m4.setId("103");
m4.setParentId("101");
m4.setName("研发部门");
dtoList.add(m4);
MenuTree m5=new MenuTree();
m5.setId("104");
m5.setParentId("101");
m5.setName("测试部门");
dtoList.add(m5);
MenuTree m6=new MenuTree();
m6.setId("105");
m6.setParentId("104");
m6.setName("营销部门");
dtoList.add(m6);
MenuTree m7=new MenuTree();
m7.setId("106");
m7.setParentId("102");
m7.setName("市场部门");
dtoList.add(m7);
MenuTree m8=new MenuTree();
m8.setId("107");
m8.setParentId("102");
m8.setName("财务部门");
dtoList.add(m8);
List<MenuTree> buildByRecursive = buildByRecursive(dtoList);
System.out.println(buildByRecursive);
}
这里才是树形结构返回的核心
buildByRecursive方法是将数据进行比较,如果该数据是父节点的话就执行findChildren方法放入到节点中去
findChildren方法是将数据进行判断,如果该数据中的子节点是否还有下一个子节点,就放入数据中去
/**
* 使用递归方法建树
* @param
* @return
*/
public static List<MenuTree> buildByRecursive(List<MenuTree> menuTreeDTOs) {
List<MenuTree> trees = new ArrayList<MenuTree>();
for (MenuTree MenuTree : menuTreeDTOs) {
if ("".equals(MenuTree.getParentId()) || MenuTree.getParentId() == null ) {
trees.add(findChildren(MenuTree,menuTreeDTOs));
}
}
return trees;
}
/**
* 递归查找子节点
* @param
* @return
*/
public static MenuTree findChildren(MenuTree menuTreeDTO,List<MenuTree> menuTreeDTOs) {
for (MenuTree menuTreeDTO2 : menuTreeDTOs) {
if(menuTreeDTO.getId().equals(menuTreeDTO2.getParentId())) {
if(menuTreeDTO.getChildren() == null) {
menuTreeDTO.setChildren(new ArrayList<MenuTree>());
}
//是否还有子节点,如果有的话继续往下遍历,如果没有则直接返回
menuTreeDTO.getChildren().add(findChildren(menuTreeDTO2,menuTreeDTOs));
}
}
return menuTreeDTO;
}
这是返回出来的结果
实际开发运用的话使用到的是将数据从数据库读取出来的。不过同理也可以返回树形结构