单表层级结构,树形结构表,递归遍历改成通用的

本文介绍了如何在Java中创建一个抽象的TreeModel类,用于表示具有层级关系的数据结构,并提供公共方法`treeList`和`findChilds`来遍历和构建树形结构。通过实例化`commodityCommodityDetailsVos`并调用`BaseUtlis.treeList`函数,可以根据pid参数获取包含一级及子级的层级数据。
摘要由CSDN通过智能技术生成

 1:想要遍历的class都想要继承以下tree

/**
 * 涉及到层级返回值 的都得继承这个,实体类生成的除外
 */
@Data
public class TreeModel {

    /**主键*/
    @ApiModelProperty(value = "主键")
    private java.lang.String id;
    /**父级节点*/
    @ApiModelProperty(value = "父级节点")
    private String pid;
    /**是否有子节点*/
    @ApiModelProperty(value = "是否有子节点")
    private String hasChild;
    @TableField(exist = false)
    private List<?> data=new ArrayList<>();

}

2:公共方法

/**
 * 遍历树形结构
 * @param thisList 值的list
 * @param valueList 返回值
 * @param pid
 */
public static <T extends TreeModel> void treeList(List<T> thisList, List<T> valueList,String pid) {
    // 遍历所有数据,找到根节点菜单
    for (T menuDTO : thisList) {
        if (menuDTO.getPid().equals(pid)) {
            // 找到根节点菜单的时候,寻找这个根节点菜单下的子节点菜单
             findChilds(menuDTO, thisList);
            // 添加到根节点的列表中
            valueList.add(menuDTO);
        }
    }
}


public static <T extends TreeModel> void findChilds(T root, List<T> list){
    List<T> childlist=new ArrayList<>();
    //遍历所有数据,找到是入参父节点的子节点的数据,然后加到childlist集合中。
    for (T menu : list) {
        if (root.getId().equals(menu.getPid())){
            childlist.add(menu);
        }
    }
    //若子节点不存在,那么就不必再遍历子节点中的子节点了 直接返回。
    if(childlist.size()==0)
        return;
    //设置父节点的子节点列表
    root.setData(childlist);
    //若子节点存在,接着递归调用该方法,寻找子节点的子节点。
    for (T childs : childlist) {
        findChilds(childs, list);
    }
}

一般单表层级结构就是,id,pid,hasChild ,三个字段组成。

一级pid为0 如果有下级hasChild为1 反之为0  而下级pid为上级id

3:使用

层级结构数据commodityCommodityDetailsVos
返回值zuodouCommodityParticularsValieVoList
pid看自己需求如果是所有一级以及子级就传0
BaseUtlis.treeList(commodityCommodityDetailsVos,zuodouCommodityParticularsValieVoList,"0");
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值