栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中列表与树状对象的相互转换

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中列表与树状对象的相互转换

一般用在菜单层级中,需要通过Java对前端传入的参数或数据库中查询到的参数进行转换处理。

1.  将树状转为列表

  • 转换前的树状实例对象
@Data
public class Menu {

    private String menuName;

    private List children;
}
  • 转换后的列表实例对象
@Data
public class MenuConfig{

    private String menuCode; //菜单编码
    
    private String menuName; //菜单名称

    private Integer menuLevel; //菜单层级

    private String menuParentCode; //父级菜单编码

}
  • 转换方法

调用getMenuList方法时,menuLevel为置为1,menuParentCode为null

//第一此调用时 层级为1 父级菜单code为null
public List getMenuList(Integer menuLevel,
                                      String menuParentCode,
                                      List menuList) {
        List menus = new ArrayList<>();
        for (Menu menu : menuList) {
            MenuConfig menuConfig = new MenuConfig();
            menuConfig .setMenuName(menu.getMenuName());
            menuConfig .setMenuLevel(menuLevel);
            String menuCode = IdUtil.fastSimpleUUID();
            menuConfig .setMenuCode(menuCode);
            menuConfig .setMenuParentCode(menuParentCode);
            if (!CollectionUtils.isEmpty(menu.getChildren())) {
                List menuChildren = getMenuList(menuLevel + 1, menuCode, 
                menu.getChildren());
                menus.addAll(menuChildren);
            }
            menus.add(menuConfig );
        }
        return menus;
    }

2. 将列表转为树状

  • 转换前后的对象
@Data
public class MenuConfigResp {

    
    private String menuName;

    
    private String menuCode;

    
    private String menuParentCode;

    
    private Integer menuLevel;

    private List children;
}
  •  转换方法
public List recursiveTree(List menus) {
        List root = new ArrayList<>();
        Map menusMap = menus.stream().collect(Collectors.toMap(MenuConfigResp::getMenuCode, menu -> menu));
        for (MenuConfigResp menu : menus) {
            String parentCode = menu.getMenuParentCode();
            if (StrUtil.isEmpty(parentCode)) {
                root.add(menu);
                continue;
            }
            MenuConfigResp menuConfigRespBO = menusMap.get(parentCode);
            if (Objects.isNull(menuConfigRespBO.getChildren())) {
                menuConfigRespBO.setChildren(new ArrayList<>());
            }
            menuConfigRespBO.getChildren().add(menu);
        }
        return root;
    }

此方法中,入参的MenuConfigResp的children为null。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1013700.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号