提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
例如:在项目中我们时常会有需求做树形菜单的需求
提示:以下是本篇文章正文内容,下面案例可供参考
一、树形结构数据是什么?
就是如图所示
二、使用步骤
1.创建实体类
树形结构一定要有子集结合 一般名为children 还要有一个上级id
@Data
public class PartnersListVo {
/** 合作伙伴Id */
private Long id;
/** 合作伙伴上级id */
private Long partnerId;
/** 合作伙伴名称 */
private String partnersName;
/** 分润金额 */
private BigDecimal allotAmount;
/** 已提现金额 */
private BigDecimal withdrawAmount;
/** 可提现金额 */
private BigDecimal canWithdrawAmount;
/*子集*/
private List<PartnersListVo> children=new ArrayList<>();;
public void addChild(PartnersListVo child) {
this.children.add(child);
}
public PartnersListVo() {
}
public PartnersListVo(Long id, Long partnerId, String partnersName, BigDecimal allotAmount, BigDecimal withdrawAmount, BigDecimal canWithdrawAmount, List<PartnersListVo> children) {
this.id = id;
this.partnerId = partnerId;
this.partnersName = partnersName;
this.allotAmount = allotAmount;
this.withdrawAmount = withdrawAmount;
this.canWithdrawAmount = canWithdrawAmount;
this.children = new ArrayList<>();
}
}
2使用方法
/**
* 获取合作伙伴列表
* @author LeiFengLiang
* @createTime 2023/5/30 10:53
* @Param [partnersName]
* @return java.util.List<com.xss.business.vo.PartnersListVo>
**/
@Override
public List<PartnersListVo> getPartnersList(String partnersName) {
List<PartnersListVo> list =baseMapper.getPartnersListVo(partnersName);
if (partnersName!=null){
return list;
}
return buildTree(list);
}
/*
* 生成树形合作伙伴列表
* @author LeiFengLiang
* @createTime 2023/5/29 17:51
* @Param [partners]
* @return java.util.List<com.xss.business.vo.PartnersListVo>
**/
public List<PartnersListVo> buildTree(List<PartnersListVo> partners) {
Map<Long, PartnersListVo> map = new HashMap<>();
List<PartnersListVo> roots = new ArrayList<>();
// 将所有合作伙伴存入map中
for (PartnersListVo partner : partners) {
map.put(partner.getId(), partner);
}
// 遍历所有合作伙伴,将其添加到其上级合作伙伴的children中
// parentId.equals(17674168247L)
for (PartnersListVo partner : partners) {
Long parentId = partner.getPartnerId();
if (parentId==null) {
// 如果该合作伙伴没有上级合作伙伴,则将其作为根节点
roots.add(partner);
} else {
PartnersListVo parent = map.get(parentId);
if (parent != null) {
parent.getChildren().add(partner);
}
}
}
return roots;
}
3.有时候有需求需要将树形结构 又变回普通集合结构 如:导出excel
/**
* 树形结构转化为普通集合数据 不影响原数据顺序
* @author LeiFengLiang
* @createTime 2023/5/31 16:30
* @Param [treeList]
* @return java.util.List<com.xss.business.vo.RecoveriesVo>
**/
private List<RecoveriesVo> convertToList(List<RecoveriesVo> treeList) {
// 创建一个空的普通集合数据
List<RecoveriesVo> list = new ArrayList<>();
// 遍历树形结构数据
for (RecoveriesVo node : treeList) {
// 将当前节点添加到普通集合数据中
list.add(node);
// 如果当前节点有子节点
if (node.getChildren() != null && !node.getChildren().isEmpty()) {
// 递归调用该方法,将子节点转化为普通集合数据,并添加到当前集合中
list.addAll(convertToList(node.getChildren()));
}
}
return list;
}
总结
该博客仅单个人笔记使用 如能帮到各位在更好哈哈