使用stream生成树状菜单

1、实体类 Menu

public class Menu {
 private String id;
 private String title;
 private String name;
 private String pid;
 private List<Menu> menus;
 //省略 get、set方法 
 public Menu(String id, String title, String name, String pid) {
 this.id = id; this.title = title; this.name = name; this.pid = pid; 
 } 
}

 

2、测试类MenuTest

public class MenuTest {
	public static void main(String[] args) {
		List<Menu> list = new ArrayList<Menu>(); 
		for (int i = 1; i <= 5; i++) {
			Menu menu = new Menu(i + "", "标题" + i, "菜单" + i, (i - 1) + "");
			list.add(menu); 
		} //添加数据 
		System.out.println(JSONUtil.toJsonStr(list)); 
		System.out.println("-----------------------------------------------------------------------"); 
		List<Menu> menuList=list.stream().filter(menu -> menu.getPid().equals("0")).peek(menu -> menu.setMenus(setChild(menu, list))) .collect(Collectors.toList()); 
		System.out.println(JSONUtil.toJsonStr(menuList)); 
	} 
	
	/** * 递归获取子菜单 */ 
	public static List<Menu> setChild(Menu menu, List<Menu> list) {
		List<Menu> menuList = list.stream().filter(m -> m.getPid().equals(menu.getId())).map(m -> { m.setMenus(setChild(m,list)); return m; }).collect(Collectors.toList()); 
		return menuList; 
	} 
}

 

请登录后发表评论

    没有回复内容