zoukankan      html  css  js  c++  java
  • Java数据封装成树形结构,多级

    参考地址:https://blog.csdn.net/chendu500qiang/article/details/91493147

    1、实体类

    @data
    public class PublishServiceType  implements Comparable<PublishServiceType>{
    
    
        /**
         * 
         */
        private static final long serialVersionUID = -3572108154932898825L;
    
    
        /* 
         * @see {code}
         * @comment 类型标识
         */
        private String code;
        /* 
         * @see {createtime}
         * @comment 创建时间
         */
        private java.util.Date createtime;
        /* 
         * @see {defaultmanual}
         * @comment 服务类型默认使用手册
         */
        private String defaultmanual;
        /* 
         * @see {description}
         * @comment 服务类型描述
         */
        private String description;
        /* 
         * @see {id}
         * @comment 主键
         */
        private String id;
        /* 
         * @see {isdelete}
         * @comment 是否可以删除
         */
        private Integer isdelete;
        /* 
         * @see {lastmodifytime}
         * @comment 最近修改时间
         */
        private java.util.Date lastmodifytime;
        /* 
         * @see {name}
         * @comment 服务类型名称
         */
        private String name;
        /* 
         * @see {parentid}
         * @comment 服务类型父节点
         */
        private String parentid;
    
        /**
         * 排序
         */
        private Integer sort;
    
        private List<PublishServiceType>children;
    }

    2、数据封装

     @Override
        public List<PublishServiceType> findList(String name) {
            List<PublishServiceType>list = publishServiceTypeMapper.findByName(name);
            if (JudgeUtil.isEmpty(list)){
                return null;
            }
            //父子级组装
            return  parentAndChildren(list);
        }
     private List<PublishServiceType>parentAndChildren(List<PublishServiceType> list){
    
            //最顶层根节点
            List<PublishServiceType>rootList = new ArrayList<>();
            //非最顶层根节点
            List<PublishServiceType>bodyList = new ArrayList<>();
            for (PublishServiceType publishServiceType : list) {
                if (StringUtils.isBlank(publishServiceType.getParentid())){
                    rootList.add(publishServiceType);
                }else{
                    bodyList.add(publishServiceType);
                }
            }
            return getTree(rootList,bodyList);
        }
    
        public List<PublishServiceType> getTree(List<PublishServiceType>rootList, List<PublishServiceType>bodyList){
            if (!JudgeUtil.isEmpty(bodyList)){
                //声明一个map,用来过滤已操作过的数据
                Map<String,String> map = new HashMap<>(bodyList.size());
                rootList.forEach(parent->getChild(parent,bodyList,map));
                return rootList;
            }else{
                return rootList;
            }
        }
    
        private void getChild(PublishServiceType parent,List<PublishServiceType>bodyList, Map<String,String> map){
           List<PublishServiceType>childList = new ArrayList<>();
            bodyList.stream().filter(c->!map.containsKey(c.getId()))
                             .filter(c->c.getParentid().equals(parent.getId()))
                             .forEach(c->{
                                 map.put(c.getId(),c.getParentid());
                                 getChild(c,bodyList,map);
                                 childList.add(c);
                             });
            
            parent.setChildren(childList);
        }

    3、结果

     1 {
     2   "code": 20000,
     3   "message": "成功",
     4   "data": [
     5     {
     6       "code": null,
     7       "createtime": null,
     8       "defaultmanual": null,
     9       "description": null,
    10       "id": "dc1d70b9eb7b4df3bbe8dcc6a93cbd57",
    11       "isdelete": -1,
    12       "lastmodifytime": null,
    13       "name": "基础服务",
    14       "parentid": "",
    15       "sort": 1,
    16       "children": [
    17         {
    18           "code": null,
    19           "createtime": null,
    20           "defaultmanual": null,
    21           "description": null,
    22           "id": "b1779671ef1b45e0a9a8a1edbff03f1e",
    23           "isdelete": -1,
    24           "lastmodifytime": null,
    25           "name": "数据源服务",
    26           "parentid": "dc1d70b9eb7b4df3bbe8dcc6a93cbd57",
    27           "sort": 2,
    28           "children": [
    29             {
    30               "code": null,
    31               "createtime": null,
    32               "defaultmanual": null,
    33               "description": null,
    34               "id": "2a38a8254ec348e9b54c9bf4622f23db",
    35               "isdelete": 1,
    36               "lastmodifytime": null,
    37               "name": "测试添加数据库服务2",
    38               "parentid": "b1779671ef1b45e0a9a8a1edbff03f1e",
    39               "sort": null,
    40               "children": []
    41             }
    42           ]
    43         },
    44         {
    45           "code": null,
    46           "createtime": null,
    47           "defaultmanual": null,
    48           "description": null,
    49           "id": "d4f3b047dc2d467a9b404ded8acf4673",
    50           "isdelete": 1,
    51           "lastmodifytime": null,
    52           "name": "text_lsa",
    53           "parentid": "dc1d70b9eb7b4df3bbe8dcc6a93cbd57",
    54           "sort": null,
    55           "children": []
    56         }
    57       ]
    58     },
    59     {
    60       "code": null,
    61       "createtime": null,
    62       "defaultmanual": null,
    63       "description": null,
    64       "id": "af1b4a4d2f074fa19e1dae0a5540a5bf",
    65       "isdelete": 1,
    66       "lastmodifytime": null,
    67       "name": "测试添加1",
    68       "parentid": "",
    69       "sort": null,
    70       "children": []
    71     },
    72     {
    73       "code": null,
    74       "createtime": null,
    75       "defaultmanual": null,
    76       "description": null,
    77       "id": "62e15d859a224126884888a55df355a7",
    78       "isdelete": 1,
    79       "lastmodifytime": null,
    80       "name": "测试添加2",
    81       "parentid": "",
    82       "sort": null,
    83       "children": []
    84     }
    85   ]
    86 }
    View Code
  • 相关阅读:
    对MVC模型的自悟,详尽解释,为了更多非计算机人员可以理解
    openSUSE leap 42.3 实现有线 无线同时用
    Fedora27 源配置
    Ubuntu16.04添加HP Laserjet Pro M128fn打印机和驱动
    openSUSE leap 42.3 添加HP Laserjet Pro M128fn打印机和驱动
    OpenSUSE Leap 42.3下通过Firefox Opera Chromium浏览器直接执行java应用程序(打开java jnlp文件)实现在服务器远程虚拟控制台完成远程管理的方法
    OpenSUSE Leap 42.3 安装java(Oracle jre)
    linux下支持托盘的邮件客户端Sylpheed
    Ubuntu下通过Firefox Opera Chromium浏览器直接执行java应用程序(打开java jnlp文件)实现在服务器远程虚拟控制台完成远程管理的方法
    Firefox 浏览器添加Linux jre插件
  • 原文地址:https://www.cnblogs.com/cq-yangzhou/p/12023949.html
Copyright © 2011-2022 走看看