当前位置 主页 > 网站技术 > 代码类 >

    Java数据封装树形结构代码实例

    栏目:代码类 时间:2020-01-15 12:04

    这篇文章主要介绍了Java数据封装树形结构代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    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);
      }