使用java的List<map> 实现树状目录(后端部分)

    近期,在做一个发布消息的功能的时候 需要在页面中显示一个树状图 把所有的可以发布的对象都排列出来 比如 发布到一个学院 一个专业 一个班级 一个人。

    具体传到前端的json类似于这个样子 

[
{
   "id":"1",
   "name":"政治学科1",
   "sfxj":"true",
   "sjId":"",
   "sjName":"",
   "cj":"1",
   "data":
   [
   {
      "id":"3",
      "name":"历史专业1",
      "sfxj":"true",
      "sjId":"1",
      "sjName":"政治学科1",
      "cj":"2",
      "data":
      [
      {
         "id":"6",
         "name":"历史班级1",
         "sfxj":"true",
         "sjId":"3",
         "sjName":"历史专业1",
         "cj":"3",
         "data":
         [
         {
            "id":"10",
            "name":"111",
            "sfxj":"false",
            "sjId":"6",
            "sjName":"历史班级1",
            "cj":"4",
            "data":[]
         },
         {
            "id":"11",
            "name":"222",
            "sfxj":"false",
            "sjId":"6",
            "sjName":"历史班级1",
            "cj":"4",
            "data":[]
         },

所以需要在后台的时候把这种json的样式拼接出来 由于开始不知道配置了spring的json转化 所以使用了纯StringBuffer的拼接方法,十分麻烦 

后来看见配置中有配置

<ref bean="mappingJacksonHttpMessageConverter"/> <!-- JSON转换器 -->

所以就直接在controller层返回一个List map泛型的就OK了

然后为了减少sql的压力 使用一条sql进行四表联查 让所有的数据显示在了一个结果集中 后来发现操作每一条结果来进行判断 遍历有点麻烦 最后也没能实现 所以由于工期有限 换成了四条sql分别查询四个列表出来 进行判断插入 

具体实现如下

for(int k=0 ; k<queryAllMapper.getXk().size();k++){
    HashMap<Object,Object> xkmap = new HashMap<>();
    xkmap.put("id",queryAllMapper.getXk().get(k).getXkid()) ;
    xkmap.put("name",queryAllMapper.getXk().get(k).getXkmc());
    xkmap.put("sfxj",queryAllMapper.getXk().get(k).getSfxj());
    xkmap.put("sjid","");
    xkmap.put("sjname","");
    xkmap.put("cj",queryAllMapper.getXk().get(k).getCj());
    xkmap.put("data",new ArrayList<>());
    Xklist.add(xkmap);
    System.out.println(Xklist);
}
for(int k=0 ; k<queryAllMapper.getZy().size();k++){
    HashMap<Object,Object> zymap = new HashMap<>();
    zymap.put("id",queryAllMapper.getZy().get(k).getZyid()) ;
    zymap.put("name",queryAllMapper.getZy().get(k).getZymc());
    zymap.put("sfxj",queryAllMapper.getZy().get(k).getSfxj());
    zymap.put("sjid",queryAllMapper.getZy().get(k).getXkid());
    zymap.put("sjname",queryByIdMapper.getXkmc(queryAllMapper.getZy().get(k).getXkid()));
    zymap.put("cj",queryAllMapper.getZy().get(k).getCj());
    zymap.put("data",new ArrayList<>());
    Zylist.add(zymap);
}
for(int k=0 ; k<queryAllMapper.getBj().size();k++){
    HashMap<Object,Object> bjmap = new HashMap<>();
    bjmap.put("id",queryAllMapper.getBj().get(k).getBjid()) ;
    bjmap.put("name",queryAllMapper.getBj().get(k).getBjmc());
    bjmap.put("sfxj",queryAllMapper.getBj().get(k).getSfxj());
    bjmap.put("sjid",queryAllMapper.getBj().get(k).getZyid());
    bjmap.put("sjname",queryByIdMapper.getZymc(queryAllMapper.getBj().get(k).getZyid()));
    bjmap.put("cj",queryAllMapper.getBj().get(k).getCj());
    bjmap.put("data",new ArrayList<>());
    Bjlist.add(bjmap);
}
for(int k=0 ; k<queryAllMapper.getXs().size();k++){
    HashMap<Object,Object> xsmap = new HashMap<>();
    xsmap.put("id",queryAllMapper.getXs().get(k).getXsid()) ;
    xsmap.put("name",queryAllMapper.getXs().get(k).getXm());
    xsmap.put("sfxj",queryAllMapper.getXs().get(k).getSfxj());
    xsmap.put("sjid",queryAllMapper.getXs().get(k).getBjid());
    xsmap.put("sjname",queryByIdMapper.getBjmc(queryAllMapper.getXs().get(k).getBjid()));
    xsmap.put("cj",queryAllMapper.getXs().get(k).getCj());
    xsmap.put("data",new ArrayList<>());
    Xslist.add(xsmap);
}
for(int i=0;i<Bjlist.size();i++){
    for(int j=0;j<Xslist.size();j++){
        if( Bjlist.get(i).get("id").equals(Xslist.get(j).get("sjid"))){
            ((ArrayList) Bjlist.get(i).get("data")).add(Xslist.get(j));
            Bjlist.get(i).put("sfxj","true");
        }
    }
}

for(int i=0;i<Zylist.size();i++){
    for(int j=0;j<Bjlist.size();j++){
        if( Zylist.get(i).get("id").equals(Bjlist.get(j).get("sjid"))){
            ((ArrayList) Zylist.get(i).get("data")).add(Bjlist.get(j));
            Zylist.get(i).put("sfxj","true");
        }
    }
}

for(int i=0;i<Xklist.size();i++){
    for(int j=0;j<Zylist.size();j++){
        if( Xklist.get(i).get("id").equals(Zylist.get(j).get("sjid"))){
            ((ArrayList) Xklist.get(i).get("data")).add(Zylist.get(j));
            Xklist.get(i).put("sfxj","true");
        }
    }
}
Xk:学科

Zy:专业

Bj:班级

Xs:学生

这样使用List加上map就能实现了 

将json的数组看做是一个list list中放入的map就相当于json对象 的key value形式 

然后有下级的情况下 又将下级的list放入上级的data 中 

这样就能实现了 在网上也看见了用节点去做的 有兴趣的可以了解一下




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值