递归菜单、栏目等
实体类
/** * id */ public Integer id; /** * 名称 */ public String name; /** * 父id ,根节点为0 */ public Integer parentId; /** * 子节点信息 */ public List<Menu> childList; public Menu(Integer id, String name, Integer parentId) { this.id = id; this.name = name; this.parentId = parentId; }
测试类
@Test public void test1(){ //模拟从数据源查询出来 //获取父节点 List<Menu> collect = menus.stream().filter(m -> m.getParentId() == 0).map( (m) -> { m.setChildList(getChildrens(m, menus)); return m; } ).collect(Collectors.toList()); System.out.println(JSON.toJSON(collect)); }
/** * 递归查询子节点 * @param root 根节点 * @param all 所有节点 * @return 根节点信息 */ private List<Menu> getChildrens(Menu root, List<Menu> all) { List<Menu> children = all.stream().filter(m -> { return Objects.equals(m.getParentId(), root.getId()); }).map( (m) -> { m.setChildList(getChildrens(m, all)); return m; } ).collect(Collectors.toList()); return children; }
执行test1测试类返回值(返回json格式,可以用json在线工具处理下)
[{"name":"手机","childList":[{"name":"苹果","childList":[{"name":"苹果-黑色","childList":[],"id":3,"parentId":2},{"name":"苹果-蓝色","childList":[],"id":4,"parentId":2}],"id":2,"parentId":1},{"name":"华为","childList":[{"name":"华为-黑色","childList":[],"id":6,"parentId":5},{"name":"华为-红色","childList":[{"name":"华为-红色-8+256","childList":[],"id":8,"parentId":7}],"id":7,"parentId":5}],"id":5,"parentId":1}],"id":1,"parentId":0},{"name":"水果","childList":[{"name":"香蕉","childList":[],"id":10,"parentId":9}],"id":9,"parentId":0}]