java递归查询组织结构树
//得到所有的菜单数据
List<FunctionJson> indoMenu = getList()
// 得到所有的父菜单,顶级菜单
List<FunctionJson> parentIds = indoMenu.stream().filter(item -> item.getFid().equals("-1")).collect(Collectors.toList());
//得到所有的子级菜单 List<FunctionJson> childIds = indoMenu.stream().filter(item -> !item.getFid().equals("-1")).collect(Collectors.toList()); //将子级菜单,根据父id分组 Map<String, List<FunctionJson>> collectMap = childIds.stream().collect(Collectors.groupingBy(item -> item.getFid())); doTree(parentIds, collectMap); return parentIds; } private void doTree(List<FunctionJson> parentIds, Map<String, List<FunctionJson>> collectMap) { //遍历父节点的集合 parentIds.forEach(item -> { //根据父id取值,看是否有值 if (!CollectionUtils.isEmpty(collectMap.get(item.getId()))) { item.setChildren(collectMap.get(item.getId())); //还有子类,将子类当做父类,继续取子类的子类,直到取完 doTree(item.getChildren(), collectMap); } }); }