zoukankan      html  css  js  c++  java
  • 菜单树(递归遍历)

              下面递归树菜单效率低:

    package com.admin.manager.storeService.util;

    import com.admin.manager.storeService.entity.Menu;

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

    /**
    * @author m
    * @date 2019/12/16
    */
    public class TreeUtil {

    /**
    * 获取菜单树
    * @param menus 所有菜单
    * @return
    */
    public static List<Menu> menuTree(List<Menu> menus) {
    //返回的菜单树
    List<Menu> rootMenus = new ArrayList<>();
    for (Menu menu : menus) {
    //pid(上级Id)为0的是根菜单
    if ("0".equals(menu.getPid())) {
    rootMenus.add(menu);
    }
    }
    //遍历,找到二级菜单(根菜单的id和所有菜单中的pid比较)
    for (Menu rootMenu : rootMenus) {
    List<Menu> child = getChild(String.valueOf(rootMenu.getId()), menus);
    rootMenu.setChildren(child);
    }
    return rootMenus;
    }

    /**
    * 递归获取下级菜单
    * @param pid 上级Id
    * @param menus 所有菜单
    * @return
    */
    public static List<Menu> getChild(String pid, List<Menu> menus) {
    //子菜单列表
    List<Menu> childList = new ArrayList<>();
    for (Menu menu : menus) {
    if (pid.equals(menu.getPid())) {
    childList.add(menu);
    }
    }
    //遍历 递归获取子菜单的子菜单
    for (Menu menu : childList) {
    List<Menu> child = getChild(String.valueOf(menu.getId()), menus);
    menu.setChildren(child);
    }
    //递归出口 childList长度为0
    if (childList.size() == 0) {
    return new ArrayList<>();
    }
    return childList;
    }
    }

    这个效率高点:

    import com.energy.service.vo.RegionTree;

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

    /**
    * @author m
    * @date 2020/4/2
    */
    public class TreeUtil {
    /**
    * 创建树结构
    * @param regionTrees
    * @return
    */
    private List<RegionTree> tree(List<RegionTree> regionTrees) {
    //返回的节点树
    List<RegionTree> rootNodes = new ArrayList<>();
    Iterator<RegionTree> it = regionTrees.iterator();
    while (it.hasNext()) {
    RegionTree next = it.next();
    //parent(上级Id)为0的是根节点
    if ("0".equals(next.getParentId())) {
    rootNodes.add(next);
    it.remove();
    }
    }
    //遍历,找到二级节点
    for (RegionTree regionTree : rootNodes) {
    List<RegionTree> child = getChild(regionTrees, regionTree.getId().toString());
    regionTree.setChildren(child);
    }
    return rootNodes;

    }

    /**
    * 查子节点
    *
    * @param regions
    * @param parentId
    * @return
    */
    private List<RegionTree> getChild(List<RegionTree> regions, String parentId) {

    //子节点列表
    List<RegionTree> childList = new ArrayList<>();
    Iterator<RegionTree> it = regions.iterator();
    while (it.hasNext()) {
    RegionTree regionTree = it.next();
    if (parentId.equals(regionTree.getParentId())) {
    childList.add(regionTree);
    it.remove();
    }
    }

    //遍历 递归获取子节点的子节点
    for (RegionTree regionTree : childList) {
    List<RegionTree> child = getChild(regions, regionTree.getId().toString());
    regionTree.setChildren(child);
    }
    //递归出口 childList长度为0
    if (childList.size() == 0) {
    return new ArrayList<>();
    }
    return childList;
    }
    }

  • 相关阅读:
    【树状数组·进阶篇】树状数组实现平衡树(树状数组上二分)
    【$Polya$定理·应用篇】$Polya$定理的几种模型简介
    【博弈论·入门篇】$SG$函数基础入门
    关于win10安装CPC专利软件以及win10安装office2003
    部署react项目到服务器,配置nginx的伪静态
    中等 39. 组合总和 (递归,去除数组中重复的元素)
    jsonp策略,cors响应头,实现跨域
    文档-关于这次参加比赛写文档的总结
    前端-关于这次暑假的和大家一起做项目的总结
    servlet获取前台数据或者返回前台数据乱码的问题
  • 原文地址:https://www.cnblogs.com/zxy-come-on/p/14164579.html
Copyright © 2011-2022 走看看