java构造树,多级菜单

public AboutUsMenuTree getMenuList()
    {
        // TODO Auto-generated method stub
        // 从数据库查询所有节点

        List<AboutUsMenu> list = aboutUsMenuDao.queryAll();

// 创建根节点0

        AboutUsMenuTree aboutUsMenuTree = new AboutUsMenuTree();
        aboutUsMenuTree.setMenuCode("0");
        List<AboutUsMenuTree> result = getChild(aboutUsMenuTree, list);

        ArrayList<AboutUsMenuTree> tmp = new ArrayList<AboutUsMenuTree>();

//当根节点放入树中后从list里面移除,一直到list的节点都放入树中为止

        while (list.size() > 0)
        {
            for (int i = 0; i < result.size(); i++ )
            {
                tmp.addAll(getChild(result.get(i), list));
                if (list.size() == 0)
                {
                    break;
                }
            }
            result = (List<AboutUsMenuTree>)tmp.clone();
            tmp.clear();
        }


        return aboutUsMenuTree;
    }


    // 传入各级根节点,获取他的子节点,再放入当前根节点中,返回下级根节点集
    private List<AboutUsMenuTree> getChild(AboutUsMenuTree root, List<AboutUsMenu> list)
    {
        List<AboutUsMenuTree> result = new ArrayList<AboutUsMenuTree>();
        for (int i = 0; i < list.size(); i++ )
        {
            AboutUsMenu aboutUsMenu_child = list.get(i);
            if (aboutUsMenu_child.getParentCode().equals(root.getMenuCode()))

            {

//拷贝值

                AboutUsMenuTree aboutUsMenuTree = new AboutUsMenuTree();
                aboutUsMenuTree.setMenuId(aboutUsMenu_child.getMenuId());
                aboutUsMenuTree.setMenuName(aboutUsMenu_child.getMenuName());
                aboutUsMenuTree.setMenuCode(aboutUsMenu_child.getMenuCode());
                aboutUsMenuTree.setOperator(aboutUsMenu_child.getOperator());
                aboutUsMenuTree.setUrl(aboutUsMenu_child.getUrl());
                aboutUsMenuTree.setDataCreate(aboutUsMenu_child.getDataCreate());
                aboutUsMenuTree.setDataUpdate(aboutUsMenu_child.getDataUpdate());
                aboutUsMenuTree.setSequence(aboutUsMenu_child.getSequence());
                result.add(aboutUsMenuTree);
                list.remove(i);
                i-- ;
            }
        }
        root.setAboutUsMenuTree(result);


        return result;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值