java递归遍历树节点6_关于JAVA递归遍历树级菜单结构

本文介绍如何使用Java实现递归遍历生成树级结构,包括菜单和分类。通过递归方法,查找数据库中的一级菜单,然后递归获取子节点,形成完整的树形结构。内容涵盖菜单类定义、递归遍历方法以及分类实体类的处理。
摘要由CSDN通过智能技术生成

需求一:这种不需要传任何参数

一、数据库存储的菜单结果:

207076602_1_20201110052037993.png

parentid为0的都是根节点,也就是一级菜单,后面的子菜单的parentid为父菜单的ID。

二、MenuDTO类(菜单类)的结构:

207076602_2_20201110052038181.gif

@Date

public class MenuDTO {

private Integer id;

private String content;

private Integer parentid;

private Date createtime;

private Integer num;

private List childs;

207076602_2_20201110052038181.gif

三、业务层:采用递归方法,遍历成树级结构菜单

207076602_2_20201110052038181.gif

//获得树级结构菜单

public List getMenuList() throws IOException {

//拿到菜单的所有数据

List list=menuMapper.getMenuList();

//存储根节点的菜单,即一级菜单

List rootlist=new ArrayList<>();

//遍历所有数据,找到根节点菜单

for (MenuDTO menuDTO:

list) {

if(menuDTO.getParentid().equals(0)){

//找到根节点菜单的时候,寻找这个根节点菜单下的子节点菜单。

findChilds(menuDTO,list);

//添加到根节点的列表中

rootlist.add(menuDTO);

}

}

return rootlist;

}

private void findChilds(MenuDTO root,List list){

List childlist=new ArrayList<>();

//遍历所有数据,找到是入参父节点的子节点的数据,然后加到childlist集合中。

for (MenuDTO menu :

list) {

if (root.getId().equals(menu.getParentid()))

childlist.add(menu);

}

//若子节点不存在,那么就不必再遍历子节点中的子节点了 直接返回。

if(childlist.size()==0)

return;

//设置父节点的子节点列表

root.setChilds(childlist);

//若子节点存在,接着递归调用该方法,寻找子节点的子节点。

for (MenuDTO childs :

childlist) {

findChilds(childs, list);

}

}

207076602_2_20201110052038181.gif

需求二:这种需要传任何参数,可以传多个

一、分类实体类

207076602_2_20201110052038181.gif

public class ChildNodeCategoryDto {

/*** 分类ID*/

private Integer catId;

/*** 分类父ID*/

private Integer parentId;

/*** 分类名称*/

private String catName;

/*** 分类级别*/

private String catLevel;

/*** 分类缩略图*/

private String catThumb;

/*** 子分类列表*/

List childCategory = new ArrayList();

207076602_2_20201110052038181.gif

二、业务层:采用递归方法,遍历成树级结构分类

207076602_2_20201110052038181.gif

public List getGoodsCategory(String ids) {

List list = new ArrayList();

GoodsCategoryDto dto = new GoodsCategoryDto();

//查询所有的分类

dto.setPlatformCode("0001");

dto.setIsShow(1);

List ecsCategoryList = ecsCategoryMapper.findAllByShowAndPlatformCodeOrderBySortOrder(dto);

for (EcsCategory ecsCategory : ecsCategoryList) {

ChildNodeCategoryDto childNodeCategory = new ChildNodeCategoryDto();

childNodeCategory.setCatId(ecsCategory.getCatId());

childNodeCategory.setParentId(ecsCategory.getParentId());

childNodeCategory.setCatName(ecsCategory.getCatName());

childNodeCategory.setCatLevel(ecsCategory.getCatCode());

childNodeCategory.setCatThumb(ecsCategory.getCatThumb());

list.add(childNodeCategory);

}

//查询根节点数据

List rootLists = new ArrayList();

String[] strArray = ids.split(",");

for(int i = 0; i

Integer catId = Integer.parseInt(strArray[i]);

//先找到所有的一级菜单

for (ChildNodeCategoryDto childNodeCategoryResponse : list) {

if (childNodeCategoryResponse.getCatId().equals(catId)) {

rootLists.add(childNodeCategoryResponse);

getChild(childNodeCategoryResponse, list);

}

}

}

}

return rootLists;

207076602_2_20201110052038181.gif

207076602_2_20201110052038181.gif

private void getChild(ChildNodeCategoryDto category, List list) {

//存放子菜单的集合

List childList = new ArrayList();

category.setChildCategory(childList);

for (ChildNodeCategoryDto childNodeCategoryResponse : list) {

if (childNodeCategoryResponse.getParentId().equals(category.getCatId())) {

childList.add(childNodeCategoryResponse);

getChild(childNodeCategoryResponse, list);

}

}

}

207076602_2_20201110052038181.gif

三、总结:

先拿到所有的菜单数据,然后遍历菜单数据,找到根节点,找到根节点。然后调用找到子节点的方法,在子节点方法中递归调用自己,

也就是说如果这个节点有子节点,那么递归调用方法找到子节点的子节点,直到某个节点下面没有子节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值