美文网首页
Java树结构常用操作代码实战

Java树结构常用操作代码实战

作者: 蒋仁勇 | 来源:发表于2019-04-04 14:07 被阅读0次

树结构可以讲是最常见的数据结构了,常用在菜单/组织架构模块上,作为一个半路出家的程序员在这里就体现出基础薄弱的问题,这里Mark一下java树结构常用操作的代码,方便回忆:

1.递归组织树状结构

 private List<Department> treeBuilder(List<Department> departments) {
        List<Department> treeList = new ArrayList<>();
        if (CollectionUtils.isNotEmpty(departments)) {
            Map<Long, List<Department>> group = group(departments);
            List<Department> firstList = group.get((long) 1);
            if (CollectionUtils.isNotEmpty(firstList)) {
                for (Department first : firstList) {
                    Department department = new Department();
                    BeanUtils.copyProperties(first, department);
                    initChildren(department, group);
                    treeList.add(department);
                }
            }
        }
        return treeList;
    }

    private Map<Long, List<Department>> group(List<Department> departmentList) {
        Map<Long, List<Department>> group = new HashMap<>(16);
        if (CollectionUtils.isNotEmpty(departmentList)) {
            for (Department department : departmentList) {
                List<Department> departments = group.get(department.getParent_id());
                if (CollectionUtils.isEmpty(departments)) {
                    departments = new ArrayList<>();
                    group.put(department.getParent_id(), departments);
                }
                departments.add(department);
            }
        }
        return group;
    }

    private void initChildren(Department tree, Map<Long, List<Department>> group) {
        List<Department> children = group.get(tree.getDept_id());
        if (CollectionUtils.isNotEmpty(children)) {
            List<Department> treeList = new ArrayList<>();
            tree.setSubsidiaryDepartments(treeList);
            for (Department child : children) {
                Department department = new Department();
                BeanUtils.copyProperties(child, department);
                treeList.add(department);
                //递归设置下级菜单
                initChildren(department, group);
            }
        }
    }

2.递归获取全部父级主键

 private void getDepParentIds(List<Department> departmentList, Long depId, Set<Long> parentIds) {
        //1.根据depId 得 parentId
        Department department = getDepParentIdById(departmentList, depId);

        Long parentId = department.getParent_id();
        parentIds.add(parentId);
        //最高一级部门的id为1退出递归
        if (department.getDept_id().equals((long) 1)) {
            return;
        }
        //2.根据parentId 得上级所有 ids
        List<Long> Ids = new ArrayList<>();
        for (Department dep : departmentList) {
            if (dep.getParent_id().equals(parentId)) {
                Ids.add(dep.getParent_id());
            }
        }
        //3.递归到步骤1
        for (Long id : Ids) {
            getDepParentIds(departmentList, id, parentIds);
        }
    }

private Department getDepParentIdById(List<Department> departmentList, Long departmentId) {
        for (Department dep : departmentList) {
            if (dep.getDept_id().equals(departmentId)) {
                return dep;
            }
        }
        return new Department();
    }

相关文章

  • Java树结构常用操作代码实战

    树结构可以讲是最常见的数据结构了,常用在菜单/组织架构模块上,作为一个半路出家的程序员在这里就体现出基础薄弱的问题...

  • JS第七天-03

    DOM DOM树结构关系代码示例: 一、JS中标签关系 二、JS操作页面标签 三、JS操作DOM一般步骤 1、创建...

  • Kotlin基础---函数

    《基于Kotlin实战》 1.普通的Java函数 2.Kotlin函数 3.对比Kotlin代码和Java代码 一...

  • RDD常用算子列表

    1.常用的Transformation算子 2.实战演练 Java版本 Scala版本 3.常用的Action算子...

  • 2017计划书单

    1. JAVA常用算法手册 2. Effective java 3. java7并发编程实战手册 4. 重构手册 ...

  • Java流操作总结

    Java流(Stream)操作自Java 8引入,通过Stream操作可以简化代码编写,提高代码执行效率。流整体操...

  • java常用代码

    1.获取环境变量 System.getenv(“PATH”); System.getenv(“JAVA_HOME”...

  • 26.Kotlin与Java互操作

    Kotlin与Java互操作 在Kotlin中操作Java 示例代码:Person类 在Java中,所有引用都可能...

  • JavaScript常用API合集

    JavaScript常用API合集 本文分享了一些JavaScript常用的代码,有DOM操作、CSS操作、对象(...

  • Docker实战常用操作

    安装和启动docker yum update -y yum -y install docker systemctl...

网友评论

      本文标题:Java树结构常用操作代码实战

      本文链接:https://www.haomeiwen.com/subject/hkbfiqtx.html