JAVA递归查询权限菜单

这篇博客主要记录了如何使用JAVA进行递归查询以获取权限菜单,包括主菜单和子菜单的实体类设计,以及具体调用的实现。通过这种方法,可以处理2到3级的菜单结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

备忘、顺便分享

实体类

主菜单实体类

@Getter
@Setter
public class Menu  implements Serializable{

	private static final long serialVersionUID = 1L;
	//id
	private Integer id;
	//父id
	private Integer pid;
	//路径
	private String path;
	//标题
	private String title;
	//图标
	private String icon;
	//子节点集合
	private List<Children> children;

子菜单实体类

@Getter
@Setter
public class Children {
	    //id
		private Integer id;
		//父id
		private Integer pid;
		//路径
		private String path;
		//标题
		private String title;
		//图标
		private String icon;
	
}

其实只用一个主菜单也行。我这有点特殊性。只用一个菜单的实体类

public class Menu  implements Serializable{

	private static final long serialVersionUID = 1L;
	//id
	private Integer id;
	//父id
	private Integer pid;
	//路径
	private String path;
	//标题
	private String title;
	//图标
	private String icon;
	//子节点集合
	private List<Menu> children;

调用

public List<Menu> getMenuToRoles( Set<String> roles) {
	  HashMap map = new HashMap();
	  Set<Integer>  set = new HashSet<Integer>();
	  Iterator iterator = roles.iterator();
	  while (iterator.hasNext()){
	  Set<Integer>  menu = loginService.getMenuToRoles((String) iterator.next());
	  set.addAll(menu);
	  }
	  List<Menu>  list =  loginService.getAllMenu(set);
	   List<HashMap>   MenuMap =new ArrayList<HashMap>();
	   //2.1)、找到所有的一级分类
      List<Menu> level1Menus = list.stream().filter((Menu) -> {
          return Menu.getPid() == 0;
      }).map((menu)->{
          menu.setChildren(getchildren(menu,list));
          return menu;
		}).collect(Collectors.toList());
      return level1Menus;
  }

  //递归查找所有菜单的子菜单
  private List<Children> getchildren(Menu root,List<Menu> all){
      List<Children> children = all.stream().filter((Menu) -> {
          return Menu.getPid() == root.getId();
      }).map((Menu) -> {
    	  Children  ch	= new Children();
    	  ch.setPath(Menu.getPath());
    	  ch.setTitle(Menu.getTitle());
    	  ch.setIcon(Menu.getIcon());
          //1.找到子菜单
        //  Menu.setChildren(getchildren(Menu,all));
          return ch;
      }).collect(Collectors.toList());
      return children;
       }

总结

上边处理的2级菜单,三级菜单把注释打开就行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值