one
two
three
hello world
https://khlbat.blog.csdn.net/article/details/93098850
one | two |
---|---|
one | two |
one | two |
one | two |
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());
}
}
}
}
}