倒序遍历

  1. //倒序遍历
  2. for (int i = menuMaps.size() - 1; i >= 0; i--) {
  3. //****删除的逻辑
  4. }

案例,

根据权限获取菜单数据,把没有不符合要求的要删除掉

  1. /**
  2. * 根据父级ID查询生成一个tree结构的数据
  3. *
  4. * @param map 要包含id,是把当前记录的id作为父级来查询的,如果查询顶级,id=0
  5. * @return tree结构的数组
  6. */
  7. @Override
  8. public List<Map<String, Object>> getTreeMenuByPermission(Map<String, Object> map, Set<String> permissions) {
  9. //构造条件构造器
  10. LambdaQueryWrapper<SysMenu> lqw = new LambdaQueryWrapper();
  11. //添加过滤条件
  12. lqw.eq(SysMenu::getTjclass, 1) //分类:1=左侧菜单,2=操作按钮,3=显示页面
  13. .eq(SysMenu::getParent, map.get("id")); //父级id
  14. //查询出符合条件的菜单数据多条
  15. List<Map<String, Object>> menuMaps = listMaps(lqw);
  16. if (menuMaps.size() > 0) {
  17. //倒序遍历
  18. for (int i = menuMaps.size() - 1; i >= 0; i--) {
  19. String path = (String) menuMaps.get(i).get("path");
  20. if (StringUtils.isNotEmpty(path)) {
  21. //如果不在权限里,则跳出循环
  22. log.info("权限:{},是否存在:{}", path, permissions.contains(path));
  23. if (!permissions.contains(path)) {
  24. log.info("被移除的:{}", menuMaps.get(i));
  25. menuMaps.remove(i);//去除没有权限的记录
  26. log.info("循环次数i={}", i);
  27. log.info("移除后的menuMaps:{}", menuMaps);
  28. continue;
  29. }
  30. log.info("权限:{}", permissions);
  31. //递归调用
  32. List<Map<String, Object>> treeMenu = getTreeMenuByPermission(menuMaps.get(i), permissions);
  33. //如果递归有值,则把值传给“children”,并put到map中,并标记hasChildren=1
  34. if (treeMenu != null) {
  35. menuMaps.get(i).put("hasChildren", 1);
  36. menuMaps.get(i).put("children", treeMenu); //这个是把递归的数据添加到children下面
  37. } else {
  38. menuMaps.get(i).put("hasChildren", 0);
  39. }
  40. log.info("map = " + menuMaps.get(i));
  41. }
  42. }
  43. return menuMaps;
  44. }
  45. return null;
  46. }