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

java 实现树形结构

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

java 实现树形结构

实体父类

@Data
public class MenuTreeNode {

    @ApiModelProperty(value = "节点ID")
    private String node;

    @ApiModelProperty(value = "父节点ID")
    private String parentNode;

    @ApiModelProperty(value = "子标签")
    private List children;
}

实体子类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ResourcePoolDetailVO extends MenuTreeNode  {

    @ApiModelProperty(value = "流程编号")
    private String targetId;

    @ApiModelProperty(value = "科目名称")
    private String projectName;

    @ApiModelProperty(value = "对比期数据")
    private BigDecimal comparevalue;

    @ApiModelProperty(value = "指标数值")
    private BigDecimal indicatorValue;

    @ApiModelProperty(value = "手工调整项")
    private BigDecimal adjustValue;

    @ApiModelProperty(value = "调整后数值")
    private BigDecimal afterAdjustValue;

    @ApiModelProperty(value = "备注")
    private String remark;

    @ApiModelProperty(value = "节点ID")
    private String node;

    @ApiModelProperty(value = "父节点ID")
    private String parentNode;

    @ApiModelProperty(value = "创建时间,系统时间")
    private Date createDate;

    @ApiModelProperty(value = "子标签")
    private List children;

    public ResourcePoolDetailVO(ResourcePoolDetailDO srcData){
        if(srcData != null) {
            BeanUtils.copyProperties(srcData, this);
        }
    }
}

tree工具类

public class MenuTreeUtil {

    //建立树形结构
    public static  List buildTree(List detailDOS){
        List treeMenus =new  ArrayList<>();
        for(MenuTreeNode menuNode : getRootNode(detailDOS)) {
            menuNode=buildChildTree(menuNode,detailDOS);
            treeMenus.add(menuNode);
        }
        return treeMenus;
    }

    //递归,建立子树形结构
    private static MenuTreeNode buildChildTree(MenuTreeNode pNode, List detailDOS){
        List childMenus =new  ArrayList<>();
        for(MenuTreeNode menuNode : detailDOS) {
            if(menuNode.getParentNode().equals(pNode.getNode())) {
                childMenus.add(buildChildTree(menuNode,detailDOS));
            }
        }
        if(CollectionUtils.isNotEmpty(childMenus)){
            pNode.setChildren(childMenus);
        }
        return pNode;
    }

    //获取根节点
    private static List getRootNode(List detailDOS) {
        List rootMenuLists =new ArrayList<>();
        for(MenuTreeNode menuNode : detailDOS) {
            if(menuNode.getParentNode().equals("0")) {
                rootMenuLists.add(menuNode);
            }
        }
        return rootMenuLists;
    }

    
    public static  List convertToObjList(List detailDOS){

        List treeMenus =new  ArrayList<>();
        for (MenuTreeNode menuNode  : detailDOS) {
            if (menuNode.getChildren() != null) {
                treeMenus.add(menuNode);
                convertToObjList(menuNode.getChildren(), treeMenus);
            } else {
                treeMenus.add(menuNode);
            }
        }
        return treeMenus;
    }

    public static  void convertToObjList(List source ,
                                                                                         List outList){
        if(outList==null){
            outList = new ArrayList<>();
        }
        for (MenuTreeNode tTreeStructure : source) {
            if (tTreeStructure.getChildren() != null) {
                outList.add(tTreeStructure);
                convertToObjList(tTreeStructure.getChildren(), outList);
            } else {
                outList.add(tTreeStructure);
            }
        }
    }

}

将数据转换成树形结构

List detailVOS = new ArrayList<>();
List resultVOs = (List) MenuTreeUtil.buildTree(detailVOS);

将树形结构转换成扁平数据

List detailVOS = new ArrayList<>();
List detailVOS = (List) MenuTreeUtil.convertToObjList(detailVOS);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/356982.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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