操作数据库树形结构java工具类

一、工具类

import com.abc5w.esgreportapi.model.ModulesModel;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * <树形结构工具类>
 *
 * @author zxx
 * @date 2022-05-05 16:05
 * @since 1.0.0
 */
public class TreeUtil {
    /**
     *
     * @param modules   所有结果集
     * @param pid       父节点id
     */
    public static List<Map<String, Object>> menuList(long pid, List<ModulesModel> modules){
        List<ModulesModel> modulesList = modules;

        List<Map<String, Object>> list = new ArrayList<>();
        // 遍历结果集,使用当前pid节点为顶级节点,调用menuChild,递归遍历所有子节点
        for (ModulesModel result : modules) {
            Map<String, Object> mapArr = new LinkedHashMap<>();
            if(pid == result.getId()){
                mapArr.put("id", result.getId());
                mapArr.put("moduleName", result.getModuleName());
                mapArr.put("moduleCode", result.getModuleCode());
                mapArr.put("pid", result.getPid());

                //遍历开始
                mapArr.put("childList", menuChild(result.getId(), modulesList));
                list.add(mapArr);
            }
        }
        return list;
    }

    /**
     * 获取子菜单
     * @param id        节点id
     */
    private static List<?> menuChild(Long id, List<ModulesModel> modulesList){
        List<Object> lists = new ArrayList<>();
        // 继续遍历menu
        for(ModulesModel result : modulesList){
            Map<String,Object> childArray = new LinkedHashMap<String, Object>();
            //找到父ID等于父节点ID的子节点
            if(result.getPid() == id){
                childArray.put("id", result.getId());
                childArray.put("moduleName", result.getModuleName());
                childArray.put("moduleCode", result.getModuleCode());
                childArray.put("pid", result.getPid());

                //向下递归
                childArray.put("childList", menuChild(result.getId(), modulesList));
                lists.add(childArray);
            }
        }
        return lists;
    }
}

二、工具类相关依赖类

import lombok.Data;

/**
 * <组件model>
 *
 * @author zxx
 * @date 2022-05-05 15:40
 * @since 1.0.0
 */
@Data
public class ModulesModel {
    private long id;
    private String moduleName;
    private String moduleCode;
    private long pid;
}

三、数据库数据格式

 

 四、工具类返回结果

 

posted @ 2022-05-23 14:10  佐佐木绯世  阅读(448)  评论(0)    收藏  举报