实体类装树结构vo

one
two
three

hello world

https://khlbat.blog.csdn.net/article/details/93098850

onetwo
onetwo
onetwo
onetwo
package com.laolang.km.modules.admin.sys.vo;

import com.laolang.km.modules.admin.sys.entity.SysMenuEntity;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import java.util.*;

/**
 * @author cjb
 * @version 1.0
 * 2019/5/4 1:45
 */
@Data
public class SysMenuTreeVo {

    private Long id;

    private Long parentId;

    private String name;

    private String icon;

    private String url;

    private Integer sort;

    private Short parentMenu;

    private List<SysMenuTreeVo> children;

    public static SysMenuTreeVo entityToVo(SysMenuEntity entity) {
        SysMenuTreeVo vo = new SysMenuTreeVo();
        BeanUtils.copyProperties(entity, vo);
        return vo;
    }

    public static List<SysMenuTreeVo> entityListToVoList(List<SysMenuEntity> entities) {
        List<SysMenuTreeVo> vos = new ArrayList<>();
        for (SysMenuEntity entity : entities) {
            vos.add(entityToVo(entity));
        }
        return vos;
    }

    /**
     * 实体列表转化为树列表
     *
     * @param entities 实体列表
     * @param sort     是否排序
     * @return 排序后的树列表
     */
    public static List<SysMenuTreeVo> entityListToTreeList(List<SysMenuEntity> entities, boolean sort) {
        List<SysMenuTreeVo> list = entityListToVoList(entities);
        List<SysMenuTreeVo> treeList = buildMenuTree(list);
        if (sort) {
            sortTree(treeList);
        }
        return treeList;
    }


    /**
     * 构造菜单树 <br />
     * 子ID必须小于父ID <br />
     * 查询所有数据时必须按照ID从小到大排序 <br />
     * https://blog.csdn.net/xiaodaima2016/article/details/89304992
     *
     * @param list 当前用户菜单列表
     * @return 菜单树
     */
    private static List<SysMenuTreeVo> buildMenuTree(List<SysMenuTreeVo> list) {
        List<SysMenuTreeVo> treeList = new ArrayList<>();
        Map<Long, SysMenuTreeVo> map = new HashMap<>();
        for (SysMenuTreeVo vo : list) {
            Long pid = vo.getParentId();
            map.put(vo.getId(), vo);
            if (null == map.get(pid)) {
                treeList.add(vo);
            } else {
                SysMenuTreeVo menuVo = map.get(pid);
                if (null == menuVo.getChildren()) {
                    menuVo.setChildren(new ArrayList<>());
                }
                menuVo.getChildren().add(vo);
            }
        }
        return treeList;
    }

    /**
     * 排序菜单树
     *
     * @param root 已构建的菜单树
     */
    private static void sortTree(List<SysMenuTreeVo> root) {
        if (null != root && root.size() > 0) {
            root.sort(Comparator.comparing(SysMenuTreeVo::getSort));
            for (SysMenuTreeVo vo : root) {
                if (null != vo.getChildren() && vo.getChildren().size() > 0) {
                    sortTree(vo.getChildren());
                }
            }
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值