关于Java中多级菜单树的处理
- 今天被一个菜单列表的展现折磨得不轻,自己写代码发现实在是费时费力,而且代码量太大,逻辑亟待优化,后续找到了这个代码十分简洁的工具类,说实话我只能看得懂,写不出来这种东西。在此分享给大家,避免重复造轮子的工作~
多级树Bean
这是一个基础bean:
/** * 功能描述: * 【分组信息bean】 * 注意,下面的bean每个属性都为必要属性,不可缺一 * 可以在此bean基础上再添加多个属性,不会影响树结构 * 类上的三个注解为lombok插件 * * @author chihiro * @version V1.0 * @date 2019/03/06 17:35 */@Data@NoArgsConstructor@AllArgsConstructorpublic class GroupInfoBean { /** * 分组主键 */ private String groupId; /** * 父节点id */ private String parentId; /** * 子节点集合 */ private Listchildren;}
树工具类
核心工具类:
/** * 功能描述: * 【多级树util】 * 核心是使用递归 * * @author chihiro * @version V1.0 * @date 2019/03/06 18:45 */@AllArgsConstructorpublic class TreeToolUtil { /** * 根节点 */ private ListrootList; /** * 叶子节点,可包含跟节点 */ private List bodyList; public List getTree() { if (CollUtil.isNotEmpty(bodyList)) { //声明一个map,用来过滤已操作过的数据 Map map = MapUtil.newHashMap(bodyList.size()); rootList.forEach(beanTree -> getChild(beanTree, map)); return rootList; } return null; } private void getChild(GroupInfoVo beanTree, Map map) { List childList = CollUtil.newArrayList(); bodyList.stream() .filter(group -> !map.containsKey(group.getGroupId())) .filter(group -> group.getParentId().equals(beanTree.getGroupId())) .forEach(group -> { map.put(group.getGroupId(), group.getParentId()); getChild(group, map); childList.add(group); }); beanTree.setChildren(childList); }}
后记
- 这套代码也是本人从网上找来调整为自己使用的,非本人自主构建。
- 若遇到其他Bug,请通过博客内联系方式找到我,我尽量解决。