栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

部门树形结构算法 — Java递归实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

部门树形结构算法 — Java递归实现

将查询到的部门列表数据,进行父子节点树形结构排序
该功能适用需要树形结构的,不仅仅是部门树

步骤:

  1. 查询数据库,获得所有的部门列表
  2. 调用下面的实现方法
一、建表语句
CREATE TABLE `dept` (
  `deptId` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(32) DEFAULT NULL COMMENT '部门名称',
  `parentId` bigint(20) DEFAULT NULL COMMENT '父级部门ID',
  PRIMARY KEY (`deptId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
二、Java实体类
package com.changge.pojo;

import java.util.ArrayList;
import java.util.List;


public class Dept {

    
    private String deptId;

    
    private String name;

    
    private String parentId;

    
    private List children = new ArrayList<>();
    
    // get,set等方法省略
    ...
三、实现方法代码
    
    public List buildDeptTree(List depts) {
        List deptList = new ArrayList<>();
        List deptIdList = new ArrayList<>();
        for (Dept dept : depts) {
            deptIdList.add(dept.getDeptId());
        }
        for (Dept dept : depts) {
            // 如果是顶级节点,遍历该父节点所有子节点
            if (!deptIdList.contains(dept.getParentId())) {
                recursionFn(depts, dept);
                deptList.add(dept);
            }
        }
        if (deptList.isEmpty()) {
            deptList = depts;
        }
        return deptList;
    }

    
    private void recursionFn(List list, Dept dept) {
        // 得到子节点列表
        List childList = getChildList(list, dept);
        dept.setChildren(childList);
        for (Dept tChild : childList) {
            // 如果子节点有下一级节点,得到下一级的节点列表
            if (hasChild(list, tChild)) {
                recursionFn(list, tChild);
            }
        }
    }

    
    private List getChildList(List list, Dept dept) {
        List deptList = new ArrayList<>();
        for(Dept d:list){
            // 遍历非顶级节点,并获得传入参数顶级节点的下一级子节点列表
            if (d.getParentId() != null && d.getParentId().equals(dept.getDeptId())) {
                deptList.add(d);
            }
        }
        return deptList;
    }

    
    private boolean hasChild(List list, Dept dept) {
        return getChildList(list, dept).size() > 0;
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/318364.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号