树形展示数据返回

简介: 树形展示数据返回

前端页面展示数据树形数据时,需要我们返回一定的数据格式,这样的情况有两种解决办法,一种是进行字符串拼接,另一种是编写对应的实体类。下面是以实体类的方式进行解决。


7.png


课程分类列表树形显示.png


第一种实现方式


一、编写实体类


一级分类


package com.caiweiwei.eduservice.entity.subject;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class OneSubject {
    private String id;
    private String title;
    private List<TwoSubject> children=new ArrayList<>();
}

二级分类


package com.caiweiwei.eduservice.entity.subject;
import lombok.Data;
@Data
public class TwoSubject {
    private String id;
    private String title;
}


二、controller层


/**
     * 功能描述:课程分类列表(树形)
     * @Author: caiweiwei
     * @Date: 2020/9/16 9:47
     */
    @GetMapping("/sublectList")
    public R getAllSubject(){
        //list的泛型是一级分类
        List<OneSubject>list= eduSubjectService.getAllOneTwoSubject();
        return R.ok().data("list",list);
    }


三、service层


/**
     * 功能描述:查询一级分类和二级分类并进行封装
     *
     * @Author: caiweiwei
     * @Date: 2020/9/16 10:12
     */
    @Override
    public List<OneSubject> getAllOneTwoSubject() {
        //查询一级分类
        QueryWrapper<EduSubject> oneSubjectQueryWrapper = new QueryWrapper<>();
        oneSubjectQueryWrapper.eq("parent_id", "0");
        List<EduSubject> oneSubjects = baseMapper.selectList(oneSubjectQueryWrapper);
        //查询二级分类
        QueryWrapper<EduSubject> twoSubjectQueryWrapper = new QueryWrapper<>();
        oneSubjectQueryWrapper.ne("parent_id", "0");
        List<EduSubject> twoSubjects = baseMapper.selectList(twoSubjectQueryWrapper);
        List<OneSubject> oneSubjectList = new ArrayList<>();
        //封装一级分类
        for (int i = 0; i < oneSubjects.size(); i++) {
            EduSubject eduSubject = oneSubjects.get(i);
            OneSubject oneSubject = new OneSubject();
            //将属性进行复制
            BeanUtils.copyProperties(eduSubject, oneSubject);
            //封装二级分类
            List<TwoSubject> twoSubjectList = new ArrayList<>();
            for (int j = 0; j < twoSubjects.size(); j++) {
                if(twoSubjects.get(j).getParentId().equals(eduSubject.getId())){
                    TwoSubject twoSubject = new TwoSubject();
                    //将属性进行赋值
                    BeanUtils.copyProperties(twoSubjects.get(j), twoSubject);
                    twoSubjectList.add(twoSubject);
                }
            }
            //将封装好的二级分类封装到一级分类的实体类中
            oneSubject.setChildren(twoSubjectList);
            oneSubjectList.add(oneSubject);
        }
        return oneSubjectList;
    }


第二种实现方式



一、创建树形结构实体类


@Data
public class TreeDto {
    private String id;
    private String name;
    private String pid;
    private String isParent;
    private List<TreeDto> childTreeDto;
}


二、创建树形工具类


public class TreeToolUtils {
    private List<TreeDto> rootList; //根节点对象存放到这里
    private List<TreeDto> bodyList; //其他节点存放到这里,可以包含根节点
    public TreeToolUtils(List<TreeDto> rootList, List<TreeDto> bodyList) {
        this.rootList = rootList;
        this.bodyList = bodyList;
    }
    public List<TreeDto> getTree(){   //调用的方法入口
        if(bodyList != null && !bodyList.isEmpty()){
            //声明一个map,用来过滤已操作过的数据
            Map<String,String> map = Maps.newHashMapWithExpectedSize(bodyList.size());
            rootList.forEach(beanTree -> getChild(beanTree,map));
            return rootList;
        }
        return null;
    }
    public void getChild(TreeDto treeDto,Map<String,String> map){
        List<TreeDto> childList = Lists.newArrayList();
        bodyList.stream()
                .filter(c -> !map.containsKey(c.getId()))
                .filter(c ->c.getPid().equals(treeDto.getId()))
                .forEach(c ->{
                    map.put(c.getId(),c.getPid());
                    getChild(c,map);
                    childList.add(c);
                });
        treeDto.setChildTreeDto(childList);
    }
}


三、使用main方法进行测试


TreeDto treeDto = new TreeDto("1", "总店", "null", "true",null);
    TreeDto treeDto1 = new TreeDto("2", "市分店", "1", "true",null);
    TreeDto treeDto2 = new TreeDto("3", "县分店", "2", "true",null);
    TreeDto treeDto3 = new TreeDto("710", "店长", "3", "true",null);
    TreeDto treeDto4= new TreeDto("713", "财务部", "3", "true",null);
    TreeDto treeDto5 = new TreeDto("20032", "后勤部", "3", "true",null);
    TreeDto treeDto6 = new TreeDto("1909", "小王", "710", "false",null);
    TreeDto treeDto7= new TreeDto("1974", "小张", "713", "false",null);
    TreeDto treeDto8 = new TreeDto("388187", "佳佳", "20032", "false",null);
    TreeDto treeDto9 = new TreeDto("1949", "阿达", "20032", "false",null);
    ArrayList<TreeDto> rootList = new ArrayList<>();//根节点
    ArrayList<TreeDto> bodyList = new ArrayList<>();//子节点
    rootList.add(treeDto);
    bodyList.add(treeDto1);
    bodyList.add(treeDto2);
    bodyList.add(treeDto3);
    bodyList.add(treeDto4);
    bodyList.add(treeDto5);
    bodyList.add(treeDto6);
    bodyList.add(treeDto7);
    bodyList.add(treeDto8);
    bodyList.add(treeDto9);
    TreeToolUtils utils =  new TreeToolUtils(rootList,bodyList);
    List<TreeDto> result =  utils.getTree();
    String jsonString = JSONObject.toJSONString(result.get(0));
    System.out.println(jsonString);
}


四、控制台输出样式


{
    "childTreeDto": [{
        "childTreeDto": [{
            "childTreeDto": [{
                "childTreeDto": [{
                    "childTreeDto": [],
                    "id": "1909",
                    "isParent": "false",
                    "name": "小王",
                    "pid": "710"
                }],
                "id": "710",
                "isParent": "true",
                "name": "店长",
                "pid": "3"
            }, {
                "childTreeDto": [{
                    "childTreeDto": [],
                    "id": "1974",
                    "isParent": "false",
                    "name": "小张",
                    "pid": "713"
                }],
                "id": "713",
                "isParent": "true",
                "name": "财务部",
                "pid": "3"
            }, {
                "childTreeDto": [{
                    "childTreeDto": [],
                    "id": "388187",
                    "isParent": "false",
                    "name": "佳佳",
                    "pid": "20032"
                }, {
                    "childTreeDto": [],
                    "id": "1949",
                    "isParent": "false",
                    "name": "阿达",
                    "pid": "20032"
                }],
                "id": "20032",
                "isParent": "true",
                "name": "后勤部",
                "pid": "3"
            }],
            "id": "3",
            "isParent": "true",
            "name": "县分店",
            "pid": "2"
        }],
        "id": "2",
        "isParent": "true",
        "name": "市分店",
        "pid": "1"
    }],
    "id": "1",
    "isParent": "true",
    "name": "总店",
    "pid": "null"
}



相关文章
|
15天前
|
SQL Java 关系型数据库
java 递归返回树形组织结构(附带树形菜单的搜索)
java 递归返回树形组织结构(附带树形菜单的搜索)
14 0
|
2月前
|
容器
微搭低代码实现下拉框动态填充值
微搭低代码实现下拉框动态填充值
|
9月前
|
JSON 数据格式
树形结构展示数据
树形结构展示数据
57 0
|
9月前
|
前端开发
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序1
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序1
31 0
|
9月前
|
前端开发
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序2
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序2
33 0
|
9月前
|
前端开发
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序3
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序3
33 0
|
前端开发
前端学习案例7-数组的填充项1
前端学习案例7-数组的填充项1
55 0
前端学习案例7-数组的填充项1
链表的展示
链表的展示
61 0
|
JavaScript
树形组件(可动态添加属性、无限嵌套)及递归展示tree数据
树形组件(可动态添加属性、无限嵌套)及递归展示tree数据
树形组件(可动态添加属性、无限嵌套)及递归展示tree数据

相关实验场景

更多