java 递归20210408-2

该博客主要介绍了如何使用Java实现部门树结构的构建。通过`TreeCommonToolUtils`工具类,将根节点和子节点进行处理,形成树形结构。`getTree`方法根据给定的根节点和子节点列表,利用递归过滤并添加子节点到对应的父节点中,最终返回完整的树形结构。示例中展示了如何从`SysDept`实体中获取数据,并转化为`TreeVO`对象,用于构建部门树。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.hnzhny.mall.restfulapi.modular.sys.controller.utils;

import java.util.List;
import java.util.Map;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.hnzhny.mall.restfulapi.modular.sys.controller.vo.TreeVO;

public class TreeCommonToolUtils {
	
	private List<TreeVO> rootList; //根节点对象存放到这里

    private List<TreeVO> bodyList; //其他节点存放到这里,可以包含根节点

    public TreeCommonToolUtils(List<TreeVO> rootList, List<TreeVO> bodyList) {
        this.rootList = rootList;
        this.bodyList = bodyList;
    }

    public List<TreeVO> getTree(){   //调用的方法入口
        if(bodyList != null && !bodyList.isEmpty()){
            //声明一个map,用来过滤已操作过的数据
            Map<Integer,Integer> map = Maps.newHashMapWithExpectedSize(bodyList.size());
            rootList.forEach(beanTree -> getChild(beanTree,map));
            return rootList;
        }
        return null;
    }

    public void getChild(TreeVO treeDto,Map<Integer,Integer> map){
        List<TreeVO> childList = Lists.newArrayList();
        bodyList.stream()
                .filter(c -> !map.containsKey(c.getTreeNodeId()))
                .filter(c ->c.getParentTreeNodeId().equals(treeDto.getTreeNodeId()))
                .forEach(c ->{
                    map.put(c.getTreeNodeId(),c.getParentTreeNodeId());
                    getChild(c,map);
                    childList.add(c);
                });
        treeDto.setChildTreeVO(childList);

    }


}


package com.hnzhny.mall.restfulapi.modular.sys.controller.vo;

import java.util.List;

import lombok.Data;

@Data
public class TreeVO {
	
	private Integer treeNodeId;
	
	private String treeNodeName;
	
	private Integer parentTreeNodeId;
	
	private List<TreeVO> childTreeVO;
	
	

}

@Override
	public List<TreeVO> getDeptTree() {
		TreeVO parentTreeVO = new TreeVO();
		parentTreeVO.setTreeNodeId(0);
		parentTreeVO.setTreeNodeName("顶级");
		ArrayList<TreeVO> rootList = new ArrayList<>();// 根节点
		rootList.add(parentTreeVO);
		List<SysDept> sysDeptList = this.selectList(new EntityWrapper<SysDept>().eq("is_deleted", HttpConsts.ZERO)
				.eq("is_enable", HttpConsts.ONE).orderBy("num", true));
		ArrayList<TreeVO> bodyList = new ArrayList<>();// 子节点
		TreeVO vo = null;
		if (CollectionUtils.isNotEmpty(sysDeptList)) {
			for (Iterator<SysDept> it = sysDeptList.iterator(); it.hasNext();) {
				SysDept sysDept = it.next();
				vo = new TreeVO();
				vo.setTreeNodeId(sysDept.getId());
				vo.setTreeNodeName(
						StringUtils.isBlank(sysDept.getSimplename()) ? sysDept.getFullname() : sysDept.getSimplename());
				vo.setParentTreeNodeId(sysDept.getPid());
				bodyList.add(vo);
			}
		}
		TreeCommonToolUtils utils = new TreeCommonToolUtils(rootList, bodyList);
		List<TreeVO> result = utils.getTree();
		return result;
	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值