递归填充树结构

递归填充树结构


自己工作中总结的一个填充树形结构的方法,可以在多种场合下使用,比如部门 菜单等等的树形结构。

/*
       递归填充树结构
        Organize    单个成员实体类
        memberList  最底层成员集合
        AllOrgList  所有部门集合
        rootId      根元素ID
     */

    public static List<Organize> buildListMemberTree(List<Organize> memberList, List<Organize> allOrgList,String rootId) {

        //是否是根节点
        boolean isTop=false;
        //memberList上一层部门集合,下次递归需要传入的新的memberList
        Set<Organize> memberListUp=new HashSet<>();
        //结果输出List
        Set<Organize> resultList=new HashSet<>();
        for(int i=0;i<copyOrgList.size();i++) {
                Organize org = copyOrgList.get(i);
                if(vo.getParentOrgId().equals(org.getOrgId())) {
                    if(org.getChildOrganize()==null) {
                        List<Organize> children=new ArrayList<>();
                        children.add(vo);
                        org.setChildOrganize(children);
                    }else {
                        org.getChildOrganize().add(vo);
                        //不去掉重复的,到时候前端收到的json数据会有问题,加上踢重速度会降低 
                        /*List<Organize> children=org.getChildOrganize();
                        boolean bl=true;
                        for (Organize child : children) {
                            if(child!=null&&child.getOrgId().equals(vo.getOrgId())){
                                bl=false;
                                break;
                            }
                        }
                        if(bl){
                            children.add(vo);
                        }*/
                        
                    }
                    voList.add(org);
                    break;
                }
                if(i==copyOrgList.size()-1){
                    System.out.println(vo.getOrgId()+"===="+vo.getParentOrgId());
                    break;
                }
            }

        }
        //所有成员都找到了子节点就返回
        if(isTop) {
            return new ArrayList<>(resultList);
        }
        return buildListMemberTree(new ArrayList<>(memberListUp),allOrgList,rootId);
    }
关于“归并到树2.0”模块说明 在此模块之前,是使用复制窗口组件,后再排序数据逐个判断加入数型框中 去的,缺点是速度慢、参数必须提供树型框。 后因为涉及更繁琐的形式,即“ 分类/类别/项目/年/月/日”等形式,原先 的思路导致速度更慢,十分影响软件的运行效果,于是花费了时间得到了现在的 模块的 1.5版。 不断测试优化后的2.0版,包含以下三个功能: 1、归并数据库中一个字段,可以是日期,也可能是文本,同时有图片索引、 数值等参数提供。 例如:某文本型字段A,含有若干条“分类/类别/项目/子项/子项a/子项b .../子项n”形式的记录,快速归并后返回字节集。 例如:某日期时间型字段B,含有若干条“2007年12月18日”形式的记录, 快速归并后返回字节集。 2、归并数据库中两个字段,第一个字段为日期时间型时第二个字段必须是文 本型,第一个字段为文本型时第二个字段可为文本型或日期时间型,快速 归并后返回字节集。 3、查找任意项目的可能位置索引。以项目、数值、是否精确为条件,对树型 框项目字节集进行搜索,速度超快。 模块的测试机配置为:PⅢ600EB、256MB、Win2kSp4,测试一万条记录的耗时 最快记录是2434。 目前,此模块我正在使用中,其中的部分代码仍可继续优化,因为时间的关系 我不能再完善此模块了,所以放出源码,希望还有易友能在保持优点的基础上,做 进一步进行优化。 Life 2007-12-18 三叶易语言自学网
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值