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

二、方法二

/**
     * 构建树形关系
     * @param list
     * @return
     */
    private List<T> getMenuList(List<T>list,Map<String){
        List<T>tList = new LinkedList<>(list);for (T parent : list) {
            for (T child : list) {
//形成树形关系的字段
if (parent.getId().equals(child.getParentId())){ List<T> children = parent.getChildren(); if (null == children){ children = new ArrayList<>(); parent.setChildren(children); } children.add(out); tList.remove(out); } } } return tList; }

 

posted @ 2019-12-11 17:35  炫舞风中  阅读(2515)  评论(2编辑  收藏  举报