这段代码的作用是获取用户关联的菜单列表。具体实现步骤如下:

  1. 根据用户ID查询关联的角色ID集合。
  2. 如果用户未关联任何角色,则默认添加默认用户角色。
  3. 判断用户是否是管理员,如果是,则返回空菜单列表。
  4. 根据用户关联的角色ID集合查询关联的菜单ID集合。
  5. 如果用户不是管理员且未关联任何菜单,则返回空菜单列表。
  6. 根据菜单ID集合查询菜单列表。
  7. 将菜单列表构建成树形结构并返回。

可以从性能和简洁性方面进行优化。

性能优化:

  1. 减少数据库查询次数。可以使用左连接或子查询等方式将多个查询合并成一个查询,从而减少数据库查询次数,提高查询效率。
  2. 减少循环次数。可以使用流式处理或并行处理等方式减少循环次数,提高处理效率。
  3. 减少对象创建次数。可以使用对象池或缓存等方式减少对象创建次数,提高内存利用率和性能。

简洁性优化:

  1. 减少重复代码。可以使用抽象方法、函数式接口等方式减少重复代码,提高代码复用性和可维护性。
  2. 减少嵌套层次。可以使用链式调用、lambda表达式等方式减少嵌套层次,提高代码可读性和简洁性。

下面是一个性能和简洁性优化后的示例代码:

public List<Tree> getUserAssociatedMenuList(String userId) { Set userAssociatedRoleIdSet = userRoleRelationService.lambdaQuery() .select(UserRoleRelation::getRoleId) .eq(UserRoleRelation::getUserId, userId) .list() .stream() .map(UserRoleRelation::getRoleId) .collect(Collectors.toSet()); if (userAssociatedRoleIdSet.isEmpty()) { userAssociatedRoleIdSet.add(RoleIdConstants.defaultUser); } boolean isAdministrator = userAssociatedRoleIdSet.contains(RoleIdConstants.administrator); Set userAssociatedMenuIdSet = isAdministrator ? Collections.emptySet() : roleMenuRelationService.lambdaQuery() .select(RoleMenuRelation::getMenuId) .in(RoleMenuRelation::getRoleId, userAssociatedRoleIdSet) .list() .stream() .map(RoleMenuRelation::getMenuId) .collect(Collectors.toSet()); if (!isAdministrator && userAssociatedMenuIdSet.isEmpty()) { return Collections.emptyList(); } List

menuList = this.lambdaQuery() .in(!isAdministrator, Menu::getId, userAssociatedMenuIdSet) .orderByAsc(Menu::getSort) .list(); return TreeUtil.build(menuList, "0", this::convertMenuToTreeNode); }

private void convertMenuToTreeNode(Menu menu, TreeNode treeNode) { treeNode.setId(menu.getId()); treeNode.setParentId(menu.getParentId()); treeNode.setName(menu.getName()); if (menu.getType().equals("菜单")) { treeNode.putExtra("isExternalUrl", menu.getIsExternalUrl()); treeNode.putExtra("url", menu.getUrl()); treeNode.putExtra("remark", menu.getRemark()); treeNode.putExtra("tag", menu.getTag()); } }

优化后的好处:

  1. 代码更加简洁易读,减少了重复代码和嵌套层次,提高了代码可读性和维护性。
  2. 性能更加优化,减少了数据库查询次数和循环次数,提高了查询效率和处理效率。
  3. 减少了对象创建次数,提高了内存利用率和性能。
  4. 可以使用lambda表达式等新特性,提高了代码可读性和简洁性。
public ListTreeString getUserAssociatedMenuListString userId SetString userAssociatedRoleIdSet = userRoleRelationServicelambdaQuery selectUserRoleRelationgetRoleId

原文地址: https://www.cveoy.top/t/topic/b1s7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录