在开发中,我们经常需要返回树形结构数据去渲染或者是遍历,有时候删除某个数据也需要遍历得到所有猴子猴孙去(斩草除根),这时候可以递归去处理获取想要的集合。

据根节点和所有list去递归获取当个tree

    private static List<CadPart> getChildren(CadPart treeEntity, List<CadPart> treeEntityList) {
        List<CadPart> collect = treeEntityList.stream()
                .filter(item -> item.getParentId().equals(treeEntity.getId()))//判断当前节点的父id是不是要设置节点的id
                .map(item -> {
                    item.setChildren(getChildren(item, treeEntityList));//如果是 为其设置子节点 通过递归 为每个除了最外层节点的节点设置子节点
                    return item;
                })
                .collect(Collectors.toList());
        return collect;
    }

获取数据的所有tree

    public List<CadPart> getTree(List<CadPart> treeList){
        List<CadPart> collect = treeList.stream()
                .filter(item -> item.getParentId() == 0)//构造最外层节点,即id=0的节点
                .map(item -> {
                    item.setChildren(getChildren(item, treeList));//id=0的节点就为他设置孩子节点
                    return item;
                }).
                collect(Collectors.toList());
        return collect;

    }
  • 结构树数据 image.png

  • 前端渲染效果 image.png