• 集合按照某个属性去分组,适用于获取树形菜单等场景


    //获取全部数据
    List menus = iMenuService.selectMenuList(userId,roleId);
    //根据parentId去分组
    Map> collect = menus.stream().collect(Collectors.groupingBy(Menu::getParentId));
    //把你分组的数据 根据某个属性去set到父集合中,这个children集合是建立在Menu这个实体类中的,这些代码的基础也是源于Menu这个实体类
    for (Menu menu : menus) {
        menu.setChildren(collect.get(menu.getMenuId()));
    }
    //过滤父集合数据,也就是父级菜单,我这里父级菜单parentid是0,所以根据这个去判断
    List newMenus = menus.parallelStream().filter(i -> i.getParentId() == 0).collect(Collectors.toList());

    最终封装的数据:

    1. {
    2. "menuId": 1,
    3. "roleId": null,
    4. "menuName": "系统管理",
    5. "parentId": 0,
    6. "parentPath": "/system",
    7. "orderNum": "2",
    8. "menuUrl": "/system",
    9. "component": null,
    10. "isFrame": null,
    11. "redirect": "test",
    12. "menuType": "M",
    13. "hidden": "1",
    14. "perms": null,
    15. "icon": "icon-settings",
    16. "routeName": "system",
    17. "cacheable": "0",
    18. "affix": "0",
    19. "children": [
    20. {
    21. "menuId": 100,
    22. "roleId": null,
    23. "menuName": "用户管理",
    24. "parentId": 1,
    25. "parentPath": "/system",
    26. "orderNum": "2",
    27. "menuUrl": "/system/user",
    28. "component": "system/user/index",
    29. "isFrame": null,
    30. "redirect": "test.com",
    31. "menuType": "C",
    32. "hidden": "1",
    33. "perms": null,
    34. "icon": "IconMenu",
    35. "routeName": "user",
    36. "cacheable": "0",
    37. "affix": "0",
    38. "children": null,
    39. "createTime": null
    40. },
    41. {
    42. "menuId": 101,
    43. "roleId": null,
    44. "menuName": "角色管理",
    45. "parentId": 1,
    46. "parentPath": "/system",
    47. "orderNum": "3",
    48. "menuUrl": "/system/role",
    49. "component": "system/role/index",
    50. "isFrame": null,
    51. "redirect": "test",
    52. "menuType": "C",
    53. "hidden": "1",
    54. "perms": null,
    55. "icon": "IconMenu",
    56. "routeName": "role",
    57. "cacheable": "0",
    58. "affix": "0",
    59. "children": null,
    60. "createTime": null
    61. },
    62. {
    63. "menuId": 102,
    64. "roleId": null,
    65. "menuName": "菜单管理",
    66. "parentId": 1,
    67. "parentPath": "/system",
    68. "orderNum": "4",
    69. "menuUrl": "/system/menu",
    70. "component": "system/menu/index",
    71. "isFrame": null,
    72. "redirect": "test.com",
    73. "menuType": "C",
    74. "hidden": "1",
    75. "perms": null,
    76. "icon": "IconMenu",
    77. "routeName": "menu",
    78. "cacheable": "0",
    79. "affix": "0",
    80. "children": null,
    81. "createTime": null
    82. },
    83. {
    84. "menuId": 103,
    85. "roleId": null,
    86. "menuName": "部门管理",
    87. "parentId": 1,
    88. "parentPath": "/system",
    89. "orderNum": "1",
    90. "menuUrl": "/system/department",
    91. "component": "system/dept/index",
    92. "isFrame": null,
    93. "redirect": "test4.com",
    94. "menuType": "C",
    95. "hidden": "1",
    96. "perms": null,
    97. "icon": "IconMenu",
    98. "routeName": "department",
    99. "cacheable": "0",
    100. "affix": "0",
    101. "children": null,
    102. "createTime": null
    103. }
    104. ],
    105. "createTime": null
    106. }

    实体类代码

    @JsonProperty注解主要用于实体类的属性上,作用可以简单的理解为在反序列化的时候给属性重命名(多一个名字来识别),我的使用是因为,在返回数据的时候把字段的is字样消除,通过注解给重命名;

    个人建议boolean字段及含有判断的字段尽量避免is_开头,因为部分框架解析会引起序列化错误,因此可能造成代码的异常,详情可浏览阿里巴巴开发手册

    1. import com.baomidou.mybatisplus.annotation.IdType;
    2. import com.baomidou.mybatisplus.annotation.TableId;
    3. import com.baomidou.mybatisplus.extension.activerecord.Model;
    4. import com.fasterxml.jackson.annotation.JsonProperty;
    5. import lombok.Data;
    6. import java.time.LocalDateTime;
    7. import java.util.ArrayList;
    8. import java.util.List;
    9. /**
    10. * @Project: uc
    11. * @Author: pangyq
    12. * @CreateTime: 2022-08-03 14:28
    13. * @Description: TODO
    14. * @Version: 1.0
    15. */
    16. @Data
    17. public class Menu extends Model {
    18. private static final long serialVersionUID = 1L;
    19. /**
    20. * 菜单ID
    21. */
    22. @TableId(type = IdType.INPUT)
    23. private Long menuId;
    24. /**
    25. * 角色ID
    26. */
    27. private Long roleId;
    28. /**
    29. * 菜单名称
    30. */
    31. private String menuName;
    32. /**
    33. * 父菜单ID
    34. */
    35. private Long parentId;
    36. /**
    37. * 上级菜单
    38. */
    39. private String parentPath;
    40. /**
    41. * 显示顺序
    42. */
    43. private String orderNum;
    44. /**
    45. * 路由地址
    46. */
    47. private String menuUrl;
    48. /**
    49. * 组件路径
    50. */
    51. private String component;
    52. /**
    53. * 是否为外链(0是 1否)
    54. */
    55. private String isFrame;
    56. /**
    57. * 外链地址
    58. */
    59. private String redirect;
    60. /**
    61. * 类型(M目录 C菜单 F按钮)
    62. */
    63. private String menuType;
    64. /**
    65. * 菜单状态:0显示,1隐藏
    66. */
    67. private String hidden;
    68. /**
    69. * 权限字符串
    70. */
    71. private String perms;
    72. /**
    73. * 菜单图标
    74. */
    75. private String icon;
    76. /**
    77. * 路由名称
    78. */
    79. private String routeName;
    80. /**
    81. * 是否缓存(0是 1否)
    82. */
    83. private String cacheable;
    84. /**
    85. * 是否固定标题栏(0是 1否)
    86. */
    87. private String affix;
    88. /**
    89. * 子菜单
    90. */
    91. private List<Menu> children = new ArrayList<Menu>();
    92. /**
    93. * 创建时间
    94. */
    95. private LocalDateTime createTime;
    96. private String badge;
    97. //@JsonProperty注解主要用于实体类的属性上,作用可以简单的理解为在反序列化的时候给属性重命名(多一个名字来识别)
    98. @JsonProperty(value = "isRootPath")
    99. private boolean isRootPath;
    100. @JsonProperty(value = "isSingle")
    101. private boolean isSingle;
    102. private String localFilePath;
    103. }

  • 相关阅读:
    【samba】Ubuntu20.04安装并配置Samba服务
    Unity实现角色受到攻击后屏幕抖动的效果
    C语言学习之路(工具篇)—— Qt Creator的使用
    操作系统的发展与分类
    力扣刷题训练(二)
    MySQL如何创建存储过程
    羊大师:羊奶的多元价值,从餐桌到保健,一奶多用
    Go通过cobra快速构建命令行应用
    摩根大通研究论文:大型语言模型+自动规划器用来作有保障的旅行规划
    5G与中国的海
  • 原文地址:https://blog.csdn.net/qq_43393995/article/details/126175532