java导入excel数据为树形处理

文章目录

  • 前言
  • 一:拆分原始数据
    • 1.创建实体类
    • 2.处理数据,将数据源拆分为若干棵树的数据集
  • 二:手动设置每棵树每个节点的id以及父id
  • 三:递归封装为树结构
  • 总结


前言

今天收到一个导入的任务,要求将excel数据保存到数据库中,不同于普通的导入,这个导入的数据是一个树形结构,如下图:

java导入excel数据为树形处理_第1张图片
通过观察数据中的层级列我们发现表格数据由2棵树组成,分别是第3,4,5,6,7,8,9,10,11和12,13,14,15,16,17,18,它们由0作树的根节点,1为0的子节点,2为相邻1的子节点,由此得出第一颗树的结构为:
java导入excel数据为树形处理_第2张图片


一:拆分原始数据

1.创建实体类

创建vo接收解析数据,在这里,我们只关心层级属性

	@Excel(name = "层级")
    private String hierarchy;
    @Excel(name = "物料编码")
    private String materialCode;
    @Excel(name = "物料名称")
    private String materialName;
    @Excel(name = "基础数量")
    private BigDecimal materialNum;
    @Excel(name = "使用数量")
    private BigDecimal useAmount;
    @Excel(name = "BOM版本")
    private String version;
    @Excel(name = "默认BOM")
    private String isDefaults;

2.处理数据,将数据源拆分为若干棵树的数据集

代码如下(示例):

/**
     * 将集合对象按指定元素分割存储
     *
     * @param materialVos 原始集合
     * @param s 分割元素(这里是当集合对象层级为0时则分割,也就是树的根节点为0)
     * @return 每棵树的结果集
     */
    private List<List<MatMaterialBomImportVo>> subsection(List<MatMaterialBomImportVo> materialVos, String s) {
   
        List<List<MatMaterialBomImportVo>> segmentedData = new ArrayList<>();
        if (materialVos != null) {
   
            //获取指定元素的数量,判断出最终将拆分为多少段
            List<MatMaterialBomImportVo> collect = materialVos.stream()

你可能感兴趣的:(java,开发语言,后端)