经常需要树形结构数据,可以利用hutool工具类构建树形结构数据。
1.查询用户所有的权限列表(平级,此例是存在一个用户有多个角色,多个角色有权限重复的部分)。
//根据角色查所有的菜单
List<PermissionVO> list = permissionMapper.findPermissionByRoleIds(roles);
2.去重:去除权限重复的
List<PermissionVO> vos_new = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()
-> new TreeSet<>(Comparator.comparing(PermissionVO :: getCode))), ArrayList::new));
3.构建树形结构:利用hutool工具类的TreeUtil.build构建树形结构
//配置
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
// 自定义属性名 都要默认值的
//数据ID
treeNodeConfig.setIdKey("code");
// 父级id字段
treeNodeConfig.setParentIdKey("parentCode");
// 排序字段,这个字段不能是null,不然会报错,默认最好是数字
treeNodeConfig.setWeightKey("sort");
// 最大递归深度
//treeNodeConfig.setDeep(3);
//转换器
List<Tree<String>> build = TreeUtil.build(vos_new, gatewayCommonConfig.getWorkbenchSysId(), treeNodeConfig, ((object, treeNode) -> {
treeNode.setId(object.getCode());//id
treeNode.setParentId(object.getParentCode());//父id
treeNode.putExtra("name", object.getName());
treeNode.putExtra("orderNum", object.getOrderNum());
treeNode.putExtra("type", object.getType());
treeNode.putExtra("url", object.getUrl());
treeNode.putExtra("icon", object.getIcon());
treeNode.putExtra("permission", object.getPermission());
}));
//转换成需要的格式
List<PermissionVO> data = JSONObject.parseArray(JSON.toJSONString(build), PermissionVO.class);