java递归获取某个父节点下面的所有子节点

1.menu实体类

package recursion;

/**
 * Created by tl on 2016/4/10.
 */
public class Menu {
    private String id;
    private String name;
    private String pid;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPid() {
        return pid;
    }

    public void setPid(String pid) {
        this.pid = pid;
    }
}

2.测试类

package recursion;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by tl on 2016/4/10.
 */
public class MenuRecursion {
    //子节点
    static  List<Menu> childMenu=new ArrayList<Menu>();

    /**
     * 获取某个父节点下面的所有子节点
     * @param menuList
     * @param pid
     * @return
     */
    public static List<Menu> treeMenuList( List<Menu> menuList, int pid){
        for(Menu mu: menuList){
            //遍历出父id等于参数的id,add进子节点集合
            if(Integer.valueOf(mu.getPid())==pid){
                //递归遍历下一级
                treeMenuList(menuList,Integer.valueOf(mu.getId()));
                childMenu.add(mu);
            }
        }
    return childMenu;
    }

    public static void main(String args[]) {
        List<Menu> menuList=new ArrayList<Menu>();
        Menu mu=new Menu();
        mu.setId("1");
        mu.setName("目录");
        mu.setPid("0");
        Menu mu1=new Menu();
        mu1.setId("2");
        mu1.setName("目录1");
        mu1.setPid("1");
        Menu mu2=new Menu();
        mu2.setId("3");
        mu2.setName("目录1.1");
        mu2.setPid("2");
        Menu mu3=new Menu();
        mu3.setId("4");
        mu3.setName("目录1.2");
        mu3.setPid("2");
        Menu mu4=new Menu();
        mu4.setId("5");
        mu4.setName("目录2");
        mu4.setPid("1");
        Menu mu5=new Menu();
        mu5.setId("6");
        mu5.setName("目录2.1");
        mu5.setPid("5");
        Menu mu6=new Menu();
        mu6.setId("7");
        mu6.setName("目录2.2");
        mu6.setPid("5");
        Menu mu7=new Menu();
        mu7.setId("8");
        mu7.setName("目录2.2.1");
        mu7.setPid("7");
        menuList.add(mu);
        menuList.add(mu1);
        menuList.add(mu2);
        menuList.add(mu3);
        menuList.add(mu4);
        menuList.add(mu5);
        menuList.add(mu6);
        menuList.add(mu7);

        List<Menu> childList=treeMenuList(menuList,0);
        for(Menu m:childList){
            System.out.println(m.getId() + "   " + m.getName());
        }
    }
    }


3.控制台结果:

3   目录1.1
4   目录1.2
2   目录1
6   目录2.1
8   目录2.2.1
7   目录2.2
5   目录2
1   目录


附录:

递归在项目的使用代码:

1.部门Department:

public class Department{
	/**
     * id
     */
    private Integer departmentId;

    /**
     * 单位名称
     */
    private String name;

    /**
     * 父级单位id,顶级单位为1
     */
    private Integer parentId;

(省略get,set方法)
}

2.递归代码(查询某个部门下面的所有子部门):

/**
     * 递归获取某个部门id下面的所有子单位
     */
    private void findChildDepartments(Set<Department> departHashSet, Integer departmentId) {
        Department dep=departmentRepository.findByDepartmentId(departmentId);
        List<Department> deptments = new ArrayList<Department>();
        deptments.add(dep);
        /**
         * 加入当前单位
         */
        departHashSet.addAll(deptments.stream().collect(Collectors.toList()));
        /**
         * 获取子单位
         */
        List<Department> departments = departmentRepository.findByParentId(departmentId);
        for (Department d : departments) {
            /**
             * 递归子单位
             */
            findChildDepartments(departHashSet, d.getDepartmentId());
        }
    }


上文讲了递归算法的概念,以及在数学算法中的运用的相关代码:


点击打开链接




  • 13
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值