实体类装树结构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
    评论
实类集合转VO集合可以使用两种方法。其中,方法一是使用BeanUtils.copyProperties()方法进行属性赋值,前提是实体类和VO类的属性名一致。方法二是使用MapStruct框架,它可以处理属性名不一致的情况。 方法一:使用BeanUtils.copyProperties()方法 前提是实体类和VO类的属性名一致。可以使用以下代码将实体类集合转换为VO类集合: ``` List<Entity> entityList = ...; // 实体类集合 List<EntityVo> entityVoList = new ArrayList<>(); // VO类集合 for (Entity entity : entityList) { EntityVo entityVo = new EntityVo(); BeanUtils.copyProperties(entity, entityVo); entityVoList.add(entityVo); } ``` 方法二:使用MapStruct框架 如果实体类和VO类的属性名不一致,可以使用MapStruct框架进行属性映射。首先,在POM文件中添加MapStruct的依赖: ``` <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> <version>1.2.0.CR1</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>1.2.0.CR1</version> </dependency> ``` 然后,在实体类和VO类之间创建一个Mapper接口,定义属性映射方法: ``` @Mapper public interface EntityMapper { EntityMapper INSTANCE = Mappers.getMapper(EntityMapper.class); EntityVo entityToVo(Entity entity); } ``` 最后,通过调用Mapper接口的方法,将实体类集合转换为VO类集合: ``` List<Entity> entityList = ...; // 实体类集合 List<EntityVo> entityVoList = entityList.stream() .map(EntityMapper.INSTANCE::entityToVo) .collect(Collectors.toList()); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值