甄齐才 2019-01-06 17:11 采纳率: 11.1%
浏览 837

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条回答 默认 最新

  • KiterCher 2019-01-07 10:35
    关注
    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());
        }
    

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

    评论

报告相同问题?

悬赏问题

  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型