倒序遍历
//倒序遍历for (int i = menuMaps.size() - 1; i >= 0; i--) {//****删除的逻辑}
案例,
根据权限获取菜单数据,把没有不符合要求的要删除掉
/*** 根据父级ID查询生成一个tree结构的数据** @param map 要包含id,是把当前记录的id作为父级来查询的,如果查询顶级,id=0* @return tree结构的数组*/@Overridepublic List<Map<String, Object>> getTreeMenuByPermission(Map<String, Object> map, Set<String> permissions) {//构造条件构造器LambdaQueryWrapper<SysMenu> lqw = new LambdaQueryWrapper();//添加过滤条件lqw.eq(SysMenu::getTjclass, 1) //分类:1=左侧菜单,2=操作按钮,3=显示页面.eq(SysMenu::getParent, map.get("id")); //父级id//查询出符合条件的菜单数据多条List<Map<String, Object>> menuMaps = listMaps(lqw);if (menuMaps.size() > 0) {//倒序遍历for (int i = menuMaps.size() - 1; i >= 0; i--) {String path = (String) menuMaps.get(i).get("path");if (StringUtils.isNotEmpty(path)) {//如果不在权限里,则跳出循环log.info("权限:{},是否存在:{}", path, permissions.contains(path));if (!permissions.contains(path)) {log.info("被移除的:{}", menuMaps.get(i));menuMaps.remove(i);//去除没有权限的记录log.info("循环次数i={}", i);log.info("移除后的menuMaps:{}", menuMaps);continue;}log.info("权限:{}", permissions);//递归调用List<Map<String, Object>> treeMenu = getTreeMenuByPermission(menuMaps.get(i), permissions);//如果递归有值,则把值传给“children”,并put到map中,并标记hasChildren=1if (treeMenu != null) {menuMaps.get(i).put("hasChildren", 1);menuMaps.get(i).put("children", treeMenu); //这个是把递归的数据添加到children下面} else {menuMaps.get(i).put("hasChildren", 0);}log.info("map = " + menuMaps.get(i));}}return menuMaps;}return null;}
