树形结构写法(子父级)(菜单 按钮)

wuchangjian2021-11-04 20:15:08编程学习

数据库中的格式

 

pojo类

public class UmsMenu implements Serializable {
    @ApiModelProperty(value = "唯一标识")
    private Long id;

    @ApiModelProperty(value = "父级ID")
    private Long parentId;

    @ApiModelProperty(value = "创建时间")
    private Date createdate;

    @ApiModelProperty(value = "菜单名称")
    private String title;

    @ApiModelProperty(value = "菜单级数")
    private Integer level;

    @ApiModelProperty(value = "菜单排序")
    private Integer sort;

    @ApiModelProperty(value = "前端名称")
    private String name;

    @ApiModelProperty(value = "前端图标")
    private String icon;

    @ApiModelProperty(value = "是否隐藏")
    private Integer hidden;

    @ApiModelProperty(value = "备用字段1")
    private String fbk1;

    @ApiModelProperty(value = "备用字段3")
    private String fbk2;

    @ApiModelProperty(value = "备用字段3")
    private String fbk3;

返回的vo树形结构类

public class UmsMenuNode extends UmsMenu {
    @ApiModelProperty(value = "子级菜单")
    private List<UmsMenuNode> children;
}

代码实现

@Override
public List<UmsMenuNode> treeList() {
//得到数据库中所有的数据
    UmsMenuExample example = new UmsMenuExample();
    List<UmsMenu> menuList = menuMapper.selectByExample(example);
//得到子父关系的list的
    List<UmsMenuNode> result = menuList.stream()
            .filter(menu -> menu.getParentId().equals(0L))
            .map(menu -> covertMenuNode(menu, menuList)).collect(Collectors.toList());
    return result;
}
/**
 * 将UmsMenu转化为UmsMenuNode并设置children属性
 */
private UmsMenuNode covertMenuNode(UmsMenu menu, List<UmsMenu> menuList) {
    UmsMenuNode node = new UmsMenuNode();
    BeanUtils.copyProperties(menu, node);
    List<UmsMenuNode> children = menuList.stream()
            .filter(subMenu -> subMenu.getParentId().equals(menu.getId()))
            .map(subMenu -> covertMenuNode(subMenu, menuList)).collect(Collectors.toList());
    node.setChildren(children);
    return node;
}

得到的结果

相关文章

520浪漫情人节可爱少女风格PPT模板

520浪漫情人节可爱少女风格PPT模板

模板介绍 精美PPT模板设计,520浪漫情人节可爱少女风格PPT模板。一...

multiscroll.js划分垂直页面滚动插件

multiscroll.js划分垂直页面滚动插件

下载地址 multiscroll.js是一个简单的插件来创建划分多滚动网站两个垂直滚动...

助企纾困 “量质齐升” 全省7月份新登记市场主体12.02万户

助企纾困 “量质齐升” 全省7月份新登记市场主体12.02万户

2022-08-19 22:42:49 8月18日上午,全省实施市场主...

[react] 怎样在react中使用innerHTML?

 [react] 怎样在react中使用innerHTML? 使用dan...

SpringCloud 和Dubbo 的区别

Dubbo关注的领域是Spring  Cloud的一个子集。Dubbo专注与服务治理&#...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。