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

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;
}

得到的结果

相关文章

重量转换之克、两、斤

售卖方式、按份或者按重,商品单位转换 @Data public...

Spark的Parquet向量化读取原理

起因: 测试过程中,发现一个spark的一个参数设置可以带...

【链表经典问题】328. 奇偶链表

一、题目描述 328.奇偶链表 给定一个单链表,把所有的奇数节点和偶数...

发表评论    

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