多级权限菜单遍历

单节点多级子节点
public class Test {

	static List<Menu> menus = Arrays.asList(
			new Menu(1, null, "一级菜单"),
			new Menu(2, 1, "二级菜单_1"),
			new Menu(3, 1, "二级菜单_2"),
			new Menu(4, 3, "三级菜单_1"),
			new Menu(5, 3, "三级菜单_2"),
			new Menu(6, 5, "四级菜单_1"),
			new Menu(7, 5, "四级菜单_2"),
			new Menu(8, 5, "四级菜单_3")
			);
    
	public static void main(String[] args) {
		Menu data = menuTree(1, null);
		System.out.println(new Gson().toJson(data));
	}
	
	public static Menu menuTree(Integer id, Menu m){
		Menu menu = m == null ? selectById(id).get(0):m;
		List<Menu> childMenus = selectByPid(id);
		for (Menu child : childMenus) {
			Menu vo = menuTree(child.getId(), child);
			menu.getMenus().add(vo);
		}
		return menu;
	}
	
	public static Menu menuTree2(Integer id){
		Menu menu = selectById(id).get(0);
		List<Menu> childMenus = selectByPid(id);
		for (Menu child : childMenus) {
			Menu vo = tree2(child.getId());
			menu.getMenus().add(vo);
		}
		return menu;
	}
	
	private static List<Menu> selectById(Integer id){
		return menus.stream().filter(m -> id.equals(m.getId())).collect(Collectors.toList());
	}
	
	private static List<Menu> selectByPid(Integer id){
		return menus.stream().filter(m -> id.equals(m.getPid())).collect(Collectors.toList());
	}
}


class Menu {
	private Integer id;
	private Integer pid;
	private String menuName;
	private List<Menu> menus = new ArrayList();

	public Menu(Integer id, Integer pid, String menuName) {
		super();
		this.id = id;
		this.pid = pid;
		this.menuName = menuName;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值