Java--返回树结构数据(Map)

一、背景

        需求:同一张表中存放有自己的Pid,查找出树形结构(类似目录)。

        工具:Map、List

    

二、步骤

        1、在实体对象中创建一个child属性

                

        2、新建一个List集合用来存放返回数据

        3、将所有数据查询出来存放到一个list中

        4、将所有数据以 数据ID为key,数据为value 放入map中

        5、遍历List,在循环中判读当前对象是否是最顶端的父节点,

                是:把此对象放到返回数据的集合里面

                否:利用当前对象和Map,找出当前对象的父节点,并放到父节点下面的child属性中。

三、实例代码

        实体对象代码:

@Data
public class TbStandardCatalogue implements Serializable {

	/**条目id*/
    private java.lang.String id;

	/**父节点id*/
    private java.lang.String pid;

	/**标准id*/
    private java.lang.String standardId;

	/**排序*/
    private java.lang.Integer sort;

	/**条目名称*/
    private java.lang.String catalogueName;

	/**条目内容*/
    private java.lang.String catalogueContent;

	/**标准条目分类*/
    private java.lang.String standardCatalogueClassify;

	/**备注*/
    private java.lang.String remark;

	/**状态(是否被删除)*/
    private java.lang.Integer status;


    @TableField(exist = false)
    private ArrayList child=new ArrayList<>();
}

        套娃代码:

public ArrayList queryByStandardId(String standardId) {
        //返回结果
        ArrayList result=new ArrayList<>();

        //根据标准id查询所有条目
        ArrayList list=tbStandardCatalogueMapper.selectByStandardId(standardId);

        if(list.isEmpty()){
            return null;
        }

        //把结果集存入list
        HashMap childs = new HashMap<>();
        for (TbStandardCatalogue tbStandardCatalogue : list) {
            //每条数据的id作为key
            childs.put(tbStandardCatalogue.getId(),tbStandardCatalogue);
        }

        //开始套娃
        for (TbStandardCatalogue tbStandardCatalogue : list) {
            if(tbStandardCatalogue.getPid().equals(tbStandardCatalogue.getStandardId())){
                //找到最顶层的父节点
                result.add(tbStandardCatalogue);
            }else{
                //子节点自己去找父节点
                TbStandardCatalogue catalogue = childs.get(tbStandardCatalogue.getPid());
                if(catalogue!=null){
                    catalogue.getChild().add(tbStandardCatalogue);
                }
            }
        }

        return result;
    }

备注:老师教的,留个记录

你可能感兴趣的:(java,java,hash)