You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Java Stream API实现StepResponse到StepResponseNew的数据迁移

实体类定义

StepResponseNew.java

step_response_new_id -- 主键
tag_record_id -- 外键
step_name
step_value
comments
..

StepResponse.java

step_response_id -- 主键
parent_id -- 外键
step_name
step_value
comments
..

TagRecordsEntity.java

tag_records_id -- 主键
parent_id -- 外键
..

需求与现有实现

需要将StepResponse中的数据迁移至StepResponseNew,两者仅前两个属性不同。目前已通过Java Stream API将StepResponse列表按parent_id分组为Map:

Map<Long, List<StepResponse>> stepEntityMap = stepResponseList.stream()
        .collect(Collectors.groupingBy(StepResponse::getStepId));

同时已获取TagRecordsEntity列表:

List<TagRecordsEntity> tagRecordsEntityList = recordsRepository.findAll();

问题

现在需要遍历tagRecordsEntityList,当其中的parent_id存在于stepEntityMap的键中时,获取对应的tag_record_id,并将StepResponse的属性赋值给StepResponseNew,求具体实现方法。

实现方案

常规循环实现

// 存储转换后的StepResponseNew对象
List<StepResponseNew> stepResponseNewList = new ArrayList<>();

for (TagRecordsEntity tagRecord : tagRecordsEntityList) {
    Long parentId = tagRecord.getParentId();
    // 匹配parent_id对应的StepResponse列表
    if (stepEntityMap.containsKey(parentId)) {
        Long tagRecordId = tagRecord.getTagRecordsId();
        // 逐个转换StepResponse为StepResponseNew
        for (StepResponse stepResponse : stepEntityMap.get(parentId)) {
            StepResponseNew newEntity = new StepResponseNew();
            // 复制共同属性
            newEntity.setStepName(stepResponse.getStepName());
            newEntity.setStepValue(stepResponse.getStepValue());
            newEntity.setComments(stepResponse.getComments());
            // 设置StepResponseNew专属外键
            newEntity.setTagRecordId(tagRecordId);
            // 其他属性按需补充赋值
            stepResponseNewList.add(newEntity);
        }
    }
}

// 后续可批量保存到数据库
// stepResponseNewRepository.saveAll(stepResponseNewList);

Stream API简化实现

如果偏好流式写法,也可以用Stream API完成转换:

List<StepResponseNew> stepResponseNewList = tagRecordsEntityList.stream()
        // 过滤出有对应StepResponse数据的TagRecordsEntity
        .filter(tagRecord -> stepEntityMap.containsKey(tagRecord.getParentId()))
        // 展开每个TagRecordsEntity对应的StepResponse列表并转换
        .flatMap(tagRecord -> {
            Long tagRecordId = tagRecord.getTagRecordsId();
            return stepEntityMap.get(tagRecord.getParentId()).stream()
                    .map(stepResponse -> {
                        StepResponseNew newEntity = new StepResponseNew();
                        newEntity.setTagRecordId(tagRecordId);
                        newEntity.setStepName(stepResponse.getStepName());
                        newEntity.setStepValue(stepResponse.getStepValue());
                        newEntity.setComments(stepResponse.getComments());
                        // 其他属性赋值
                        return newEntity;
                    });
        })
        .collect(Collectors.toList());

内容的提问来源于stack exchange,提问作者user8401182

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:55:20