Java 递归查找出子节点,然后重新放到Map中

这是从数据库递归查询出所有的数据
图片说明

 然后在Java  controller  重新封装到Map
Map<String,Object> result=new HashMap<>();//返回的结果存放
        Map<String,Object> dataObj=new HashMap<>();//用于存放data
        Map<String,Object> message=new HashMap<>();//用于存放Message  包含 data children子map
        List<Map<String,Object>> children=new ArrayList<Map<String,Object>>();
        for(Map<String,Object> dataMap : datas){
            dataObj.put("id",dataMap.get("id"));//ID
            dataObj.put("created",dataMap.get("created"));//创建时间
            dataObj.put("source",dataMap.get("source")==null ? "" : dataMap.get("source"));//依据来源
            dataObj.put("severity",dataMap.get("severity")==null ? "" : dataMap.get("severity"));//警示等级
            dataObj.put("message",dataMap.get("message")==null ? "" : dataMap.get("message"));//药品内容
            dataObj.put("advice",dataMap.get("advice")==null ? "" : dataMap.get("advice"));//药品建议
            dataObj.put("label",dataMap.get("label"));//名称
            dataObj.put("description",dataMap.get("description")==null ? "" : dataMap.get("description"));//描述
            dataObj.put("drugName",dataMap.get("drugName")==null ? "" : dataMap.get("drugName"));//药品名称
            dataObj.put("leftType",dataMap.get("lefttype")==null ? "" : dataMap.get("lefttype"));//左侧表达式
            dataObj.put("type",dataMap.get("type")==null ? "" : dataMap.get("type"));//表达式类型
            dataObj.put("RightExpr",dataMap.get("rightexpr")==null ? "" : dataMap.get("rightexpr"));//右侧表达式
            dataObj.put("exprName",dataMap.get("exprname")==null ? "" : dataMap.get("exprname"));//表达式名称
            dataObj.put("expr",dataMap.get("expr")==null ? "" : dataMap.get("expr"));//表达式
            dataObj.put("express",dataMap.get("express")==null ? "" : dataMap.get("express"));//表达式全称
            dataObj.put("attrName",dataMap.get("attrname")==null ? "" : dataMap.get("attrname"));//属性名称
            dataObj.put("isEnabled",dataMap.get("isenabled")==null ? "" : dataMap.get("isenabled"));//是否启用
            dataObj.put("applyRange",dataMap.get("applyrange")==null ? "" : dataMap.get("applyrange"));//适用范围
            dataObj.put("applyObject",dataMap.get("applyObject")==null ? "" : dataMap.get("applyObject"));//适用对象
            dataObj.put("analysisType",dataMap.get("analysisType")==null ? "" : dataMap.get("analysisType"));//分析类型
            dataObj.put("analysisResultType",dataMap.get("analysisResultType")==null ? "" : dataMap.get("analysisResultType"));//提示类型
            dataObj.put("sourceId",dataMap.get("sourceid")==null ? "" : dataMap.get("sourceid"));//来源ID
            dataObj.put("errorType",dataMap.get("errortype")==null ? "" : dataMap.get("errortype"));//错误类型
            dataObj.put("origMessageIds",dataMap.get("origMessageIds")==null ? "" : dataMap.get("origMessageIds"));//错误类型ID
            dataObj.put("leftValue",dataMap.get("leftValue")==null ? "" : dataMap.get("leftValue"));//左表达式值
            dataObj.put("leftUnit",dataMap.get("leftUnit")==null ? "" : dataMap.get("leftUnit"));//左表达式单位
            dataObj.put("rightValue",dataMap.get("rightValue")==null ? "" : dataMap.get("rightValue"));//右表达式值
            dataObj.put("rightUnit",dataMap.get("rightUnit")==null ? "" : dataMap.get("rightUnit"));//右表达式单位
            dataObj.put("checkid",dataMap.get("checkid")==null ? "" : dataMap.get("checkid"));//图形检查字段
            dataObj.put("graph",dataMap.get("graph")==null ? "" : dataMap.get("graph"));//图形脑图类型
            dataObj.put("text",dataMap.get("label")==null ? "" : dataMap.get("label"));//名称
            message.put("data",dataObj);
            //message.put("children",getChildren((String)dataMap.get("id")));
            message.put("children",ruleGraphService.getChildren((String)dataMap.get("id")));
            //message.put("children",ruleGraphService.getNewChildrenList(datas,(String)dataMap.get("id")));

        }
        result.put("Success",true);
        result.put("Message",message);
        return result;

1个回答

private List<JSONObject> generateOrgMapToTree(List<JSONObject> orgMaps, String pid) {
        List<JSONObject> orgList = new ArrayList<>();
        if (orgMaps != null && orgMaps.size() > 0) {
            for (JSONObject item : orgMaps) {
                //比较传入pid与当前对象pid是否相等
                if (pid.equals(item.get("pid"))) {
                    //将当前对象id做为pid递归调用当前方法,获取下级结果
                    List<JSONObject> children = generateOrgMapToTree(orgMaps, item.getString("id"));
                    //将子结果集存入当前对象的children字段中
                    item.put("children", children);
                    //添加当前对象到主结果集中
                    orgList.add(item);
                }
            }
        }
        return orgList;
    }


    public static void main(String[] args) {
        List<JSONObject> list = new ArrayList<>();
        JSONObject j1=  new JSONObject();
        j1.put("id","sss");
        j1.put("pid","456ad");
        list.add(j1);
        JSONObject j2=  new JSONObject();
        j2.put("id","ddd");
        j2.put("pid","sss");
        list.add(j2);
        JSONObject j3=  new JSONObject();
        j3.put("id","ddd1");
        j3.put("pid","sss");
        list.add(j3);
        JSONObject j4=  new JSONObject();
        j4.put("id","ddd12");
        j4.put("pid","ddd");
        list.add(j4);
        JSONObject j5=  new JSONObject();
        j5.put("id","ddd13");
        j5.put("pid","ddd");
        list.add(j5);
        JSONObject j6=  new JSONObject();
        j6.put("id","ddd2");
        j6.put("pid","ddd1");
        list.add(j6);
        JSONObject j7=  new JSONObject();
        j7.put("id","ddd3");
        j7.put("pid","ddd1");
        list.add(j7);


        //这里逻辑是先拿到父节点,再去查询子节点
        List<JSONObject> list1 = new test().generateOrgMapToTree(list, j1.getString("id"));
        j1.put("children",list1);
        System.out.println(j1.toString());
    }

可以直接运行的代码。有用记得点赞和采纳,谢谢

KiterCher
KiterCher 回复甄齐才:哦哦,我搞错了,oracle,等一下,我知道你想要的是什么了。
一年多之前 回复
coco2d_x2014
甄齐才 就是数据库中查出所有数据,然后将这数据进行递归查出子节点再放到Map中
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐