java构造树形结构

1.入口方法:
@PostMapping("/tree")
public AjaxResult tree(@RequestBody BodyMap body){
    //参数
    String name = body.getString("name"); //组织名称
    Integer status = body.getInt("status"); //状态(0 启用,1 停用)
    //查询
    List<WhpManagerOrg> list = orgService.list(new LambdaQueryWrapper<WhpManagerOrg>()
            .like(StringUtils.isNotEmpty(name), WhpManagerOrg::getName, name)
            .eq(status != null, WhpManagerOrg::getStatus, status)
            .orderByAsc(WhpManagerOrg::getSort)
    );
    return AjaxResult.success(OrgTreeVO.build(list));
}
2.封装model


package com.ssitg.project.system.org.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.ssitg.project.system.org.domain.WhpManagerOrg;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @description: 区域树形列表
 */
@Data
public class OrgTreeVO {

    private Integer id;  //主键
    private Integer pid;  //父主键
    private String name;  //名称
    private Integer sort;  //显示排序
    private WhpManagerOrg.Status status;  //状态(0 启用,1 停用)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime; //创建时间
    private List<OrgTreeVO> childs; //子节点

    public OrgTreeVO(WhpManagerOrg org){
        BeanUtils.copyProperties(org, this);
    }

    /**
     * 构建
     * @return
     */
    public static List<OrgTreeVO> build(List<WhpManagerOrg> orgList){

        //转换为 vo
        List<OrgTreeVO> voList = orgList.stream().map(OrgTreeVO::new).collect(Collectors.toList());
        Map<Integer, OrgTreeVO> voMaps = voList.stream().collect(Collectors.toMap(OrgTreeVO::getId, vo -> vo));

        //构建
        List<OrgTreeVO> root = new ArrayList<>(); //根节点
        for(OrgTreeVO vo : voList){
            //根节点
            if(vo.getPid() == null){
                root.add(vo);
            }
            //子节点
            else{
                OrgTreeVO parentVo = voMaps.get(vo.getPid());
                if(parentVo == null)
                    root.add(vo);  //如果找不到父节点,则直接放到根节点
                else
                    parentVo.addChild(vo);
            }
        }
        return root;
    }


    /**
     * 添加子节点
     * @param child
     */
    public void addChild(OrgTreeVO child){
        if(childs == null)
            childs = new ArrayList<>();
        childs.add(child);
    }
}

3.表结构:

4.表数据:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值