关于copy树形结构

这段代码主要涉及数据结构的平铺转换,以及在转换过程中处理父子ID的存储。首先,通过遍历和递归将树形结构转化为扁平列表,并在过程中处理子节点。然后,创建新的对象列表并复制属性,同时为每个对象生成新的ID,并根据父ID进行更新。最后,将关联内容从旧列表中取出并存入新的表中。

先把想要copy的去平铺

  //平铺树形结构
        List<AhseH0002AssessmentLibEntity> outList = new ArrayList<>();
        for (AhseH0002AssessmentLibEntity tTreeStructure : baseBean) {
            if (tTreeStructure.getZAhseH0002AssessmentEntity() != null) {
                List<AhseH0002AssessmentLibEntity> treeStructureList = tTreeStructure.getZAhseH0002AssessmentEntity();
                outList.add(tTreeStructure);
                convertChildrenToTileList(treeStructureList, outList);
                //若不需要字节点,则可设置为空
                //  tTreeStructure.setChildren(null);
            } else {
                outList.add(tTreeStructure);
            }
        }
//递归实现  
private static void convertChildrenToTileList(List<AhseH0002AssessmentLibEntity> source , List<AhseH0002AssessmentLibEntity> outList){
        if(outList==null){
            outList = new ArrayList<>();
        }
        for (AhseH0002AssessmentLibEntity tTreeStructure : source) {
            if (tTreeStructure.getZAhseH0002AssessmentEntity() != null) {
                List<AhseH0002AssessmentLibEntity> treeStructureList = tTreeStructure.getZAhseH0002AssessmentEntity();
                outList.add(tTreeStructure);
                convertChildrenToTileList(treeStructureList, outList);
                //若不需要字节点,则可设置为空
                //  tTreeStructure.setChildren(null);
            } else {
                outList.add(tTreeStructure);
            }
        }
    }

将父id子id 分别存入

//传入链表不变
       ArrayList<AhseH0002AssessmentLibEntity> oldlist = new ArrayList<>(16);
        for (AhseH0002AssessmentLibEntity ahseH0002AssessmentLibEntity : outList) {
            AhseH0002AssessmentLibEntity ahseH0002AssessmentLibEntity1 = new AhseH0002AssessmentLibEntity();
            BeanUtils.copyProperties(ahseH0002AssessmentLibEntity, ahseH0002AssessmentLibEntity1);
            oldlist.add(ahseH0002AssessmentLibEntity1);
        }

        // id列表篇存Map
        HashMap<String, String> map = new HashMap<String, String>(16);
        for (AhseH0002AssessmentLibEntity assessmentEntity : outList) {
            String s = IdUtil.randomUUID();
            map.put(assessmentEntity.getId(), s);
            assessmentEntity.setId(s);
        }
        //循环链表保存修改后的值
        for (AhseH0002AssessmentLibEntity assessmentEntity : outList) {
            if (map.get(assessmentEntity.getFid()) != null) {
                //重置父级ID
                assessmentEntity.setFid(map.get(assessmentEntity.getFid()));
            } else {
                //查不到父级拿取前端传来Idd
                assessmentEntity.setFid(idd);
            }
            ahseH0002AssessmentMapper.add(assessmentEntity);
        }
        //循环旧链表将关联的内容表查出并新建如另一张表
        for (AhseH0002AssessmentLibEntity ahseH0002AssessmentLibEntity : oldlist) {
                AhseH0002AssessmentlistEntity ahseH0002AssessmentlistEntity = new AhseH0002AssessmentlistEntity();
                ahseH0002AssessmentlistEntity.setAssessmentid(ahseH0002AssessmentLibEntity.getId());
                // 拿旧对象的
                List<AhseH0002AssessmentlistEntity> list = ahseH0002AssessmentlistMapper.getList(ahseH0002AssessmentlistEntity);
                if (list!=null&&list.size()>0){
                    for (AhseH0002AssessmentlistEntity h0002AssessmentlistEntity : list) {
                        // 将查出来的数据链表转换成另一张表内容
                        AhseH0002AssessmentLiblistEntity copylist = new AhseH0002AssessmentLiblistEntity();
                        copylist.setContent(h0002AssessmentlistEntity.getContent());
                        copylist.setFraction(h0002AssessmentlistEntity.getFraction());
                        copylist.setLrr(h0002AssessmentlistEntity.getLrr());
                        copylist.setLrsj(h0002AssessmentlistEntity.getLrsj());
                        copylist.setName(h0002AssessmentlistEntity.getName());
                        copylist.setScoringCriteria(h0002AssessmentlistEntity.getScoringCriteria());
                     //   BeanUtils.copyProperties(copylist, h0002AssessmentlistEntity);
                        //生成新的id 并把新的关联id 传入新表
                        copylist.setId(IdUtil.randomUUID());
                        if (map.get(h0002AssessmentlistEntity.getAssessmentid())!=null){
                            copylist.setAssessmentid(map.get(h0002AssessmentlistEntity.getAssessmentid()));
                        }

                        ahseH0002AssessmentLibListMapper.add(copylist);
                    }
                }

            }

### 实现 ElementUI 树形组件的时间字段排序 为了实现在 ElementUI 的树形组件中依据时间字段对节点进行排序的功能,可以采用自定义渲染函数以及利用 `children` 属性来动态调整子项顺序的方式。具体来说: 当获取到服务器返回的数据之后,在前端处理这些数据之前,可以根据每个节点的时间戳来进行预排序操作[^1]。 对于树状结构而言,除了根级别的条目外,还需要确保每一个父级下的所有直系后代都遵循相同的时间排序逻辑。这可以通过遍历整个树并应用递归算法完成。每次遇到一个新的分支时,都会对其内部成员执行一次新的排序过程[^2]。 另外一种更高效的做法是在服务端就已经完成了基于时间属性的初步排列工作,这样客户端只需要简单地解析JSON对象即可显示已排好序的结果集;然而如果业务需求允许更加灵活的变化,则建议在前端做进一步优化[^3]。 下面是一个简单的 JavaScript 函数用于根据创建日期降序重新安排给定数组内的元素位置,并适用于树形结构中的每一层: ```javascript function sortByCreateTimeDesc(treeData) { function sortNode(nodes) { nodes.sort((a, b) => new Date(b.createTime).getTime() - new Date(a.createTime).getTime()); for (let node of nodes) { if (node.children && Array.isArray(node.children)) { sortNode(node.children); } } } const copy = JSON.parse(JSON.stringify(treeData)); // 防止原数据被修改 sortNode(copy); return copy; } ``` 此代码片段假设每一条记录都有一个名为 `createTime` 的字符串类型的日期/时间字段表示该节点何时建立。请注意替换实际使用的键名以匹配应用程序的具体情况[^4]。 最后一步就是将经过上述方法加工后的有序列表传递给 Tree 或 Table 组件作为其 props 中的数据源参数,从而达到预期效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值