List<Object>按树形结构分组排序

第一丶构建树形第一层

    /**
     * 
     * @param allNode  要排序的List
     * @param parentMap  构建所有父类的List
     * @param loaStubHashMap  构建父类对应的子类List
     * @param partfid 顶层父
     */

   public static void getNode(List<Map> allNode, List<Map> parentMap,
                                 Map<String, List<Map>> loaStubHashMap,String partfid){
        for(Map m:allNode){
            if(m.get("GPARTFID").equals(partfid)){
                //找出所有第一层结构
                parentMap.add(m);
            }
        }
        //从第一层开始往下找结构
        for(int i=0;i< allNode.size();i++){
            List<Map> child = new ArrayList<>();
            Map parent = allNode.get(i);
            String partBase = parent.get("GPARTID").toString();
            for(Map m:allNode){
                if(m.get("GPARTFID").equals(parent.get("GPARTID"))){
                    if(loaStubHashMap.containsKey(partBase)){
                        loaStubHashMap.get(partBase).add(m);
                    }else{
                        child.add(m);
                        loaStubHashMap.put(partBase,child);
                    }
                }
            }
        }
    }

第二丶开始构建树形结构

    /**
     *
     * @param bomlist  最终的排序结果
     * @param parentMap  父件List
     * @param loaStubHashMap  父对应的子List
     * @param level  (可移除)
     * @param partInfo (可移除)
     */
    public static void changeToBomlist(List<BOMStubInfo> bomlist,List<Map> parentMap,
                                       Map<String, List<Map>> loaStubHashMap,int level,Map<String,Map> partInfo){
        if(parentMap.size() > 0){
            for(Map parent:parentMap){
                BOMStubInfo chld = getBOMStubInfo(parent,partInfo);
                chld.setLEVELS(level);
                bomlist.add(chld);
                String childpart = (String) parent.get("GPARTID");

                if (loaStubHashMap.containsKey(childpart)) {
                    //递归
                    List<Map> childlist = loaStubHashMap.get(childpart);
                    Recursive(childlist, level, bomlist, loaStubHashMap,partInfo);
                }
            }
        }
    }

第三丶形成递归循环

   public static void Recursive(List<Map> childlist, int level,
                                 List<BOMStubInfo> bomlist, Map<String, List<Map>> loasmap,Map<String,Map> partInfo){
        level = level + 1;
        for (Map pre : childlist) {
            BOMStubInfo chld = getBOMStubInfo(pre,partInfo);
            chld.setLEVELS(level);
            bomlist.add(chld);
            String childpart = (String) pre.get("GPARTID");
            if (loasmap.containsKey(childpart)) {
                //递归
                List<Map> chlist = loasmap.get(childpart);
                Recursive(chlist, level, bomlist, loasmap,partInfo);
            }
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值