Java 封装菜单等树结构

用Java封装菜单等树结构

创建菜单类, 需要补充一个用来装子菜单的属性,并保证一级菜单父id为-1 (可自定义)

public class MenuDto {
    /**
     * 表id
     */
    private String id;
    /** 
     * 菜单code
     */
    private String code;
    /**
     * 菜单名称
     */
    private String name;
    /**
     * 级别
     */
    private Integer level;
    /**
     * 父菜单id
     */
    private String pid;
    /**
     * 树路径
     */
    private String path;
    /**
     * 创建人
     */
    private String creator;
    /**
     * 创建时间
     */
    private Date createTime;
    /**
     * 修改人
     */
    private String modifier;
    /**
     * 修改时间
     */
    private Date updateTime;
    /**
     * 角色菜单状态  1 勾选  2 未勾选
     */
    private int status;
    /**
    * 在创建菜单类的时候 需要补充一个用来装子菜单的属性
    */
 	List<MenuDto> childMenus; 
}
传入List<MenuDto>  进行递归操作 将菜单进行递归遍历封装成树结构
 		public static List<MenuDto> getMenuList(List<MenuDto> list) {
        List<MenuDto> menuList = new ArrayList<>();     // 先找到所有的一级菜单
          for (int i = 0; i < list.size(); i++) {         // 一级菜单父ID为-1
               if (list.get(i).getPid().equals("-1")) {
                   menuList.add(list.get(i));
               }
          }     // 为一级菜单设置子菜单,getChild是递归调用的
         for (MenuDto menu : menuList) {
             menu.setChildMenus(getChild(menu.getId(), list));
         }
         Map<String,Object> jsonMap = new HashMap<String,Object>();
         jsonMap.put("menu", menuList);
         System.out.println(JSON.toJSONString(jsonMap));
         return menuList;
    }

		//递归
        private static List<MenuDto> getChild (String id, List < MenuDto > rootMenu){
			// 子菜单
            List<MenuDto> childList = new ArrayList<>();
            for (MenuDto menu : rootMenu) {
				// 遍历所有节点,将父菜单id与传过来的id比较
                if (menu.getPid().equals(id)) {
                    childList.add(menu);
                }
            }
            // 把子菜单的子菜单再循环一遍
            for (MenuDto menu : childList) {
                menu.setChildMenus(getChild(menu.getId(), rootMenu));
            }     // 判断递归结束  
            if (childList.size() == 0) {
                     return null;
             }     
             return childList;
        }

菜单树list去重方法

 public static List repeatListWay(List<MenuDto> list){
        List<MenuDto> newList = new ArrayList<>();
        for(int i = 0; i < list.size(); i++ ){
            boolean isContains = newList.contains(list.get(i));
            if(!isContains){
                newList.add(list.get(i));
            }
        }
        list.clear();
        list.addAll(newList);
        return list;
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java树形结构的封装可以通过递归思路进行构建。可以定义一个树节点数据类,其中包含节点的ID、父节点ID、节点名称以及子节点列表等信息。可以使用Lombok库来简化代码,省略实体类的set()和get()方法。引入Lombok的Jar包后,可以使用@Data注解来自动生成这些方法。\[1\] 在树节点数据类中,可以定义入参和出参,使用泛型来处理通用的基本信息。可以使用@Builder注解来生成构建器方法,方便创建对象。\[2\] 另外,可以定义一个TreeNode类来表示每个节点的信息,包括节点ID、父节点ID、节点名称以及子节点列表。可以使用@Getter和@Setter注解来自动生成get和set方法。\[3\] 通过递归的方式,可以根据给定的数据构建树形结构。可以根据节点的父节点ID来递归地将节点添加到对应的父节点的子节点列表中,最终形成完整的树形结构。 这样封装的树形结构可以方便地返回给前端,并以下拉菜单等形式进行展示。 #### 引用[.reference_title] - *1* *3* [Java后端递归构建树形结构](https://blog.csdn.net/a18505947362/article/details/122458089)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [java代码封装的树型通用结构](https://blog.csdn.net/weixin_41905047/article/details/128889084)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值