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

如何使用MapStruct实现List<Integer>到List<CustomObject>的映射

MapStruct 对象映射实现方案

核心实现逻辑

自定义单个Integer到CustomObject的转换方法,MapStruct会自动识别该方法完成List<Integer>到List<CustomObject>的批量转换,无需手动编写循环逻辑。

完整Mapper代码

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;

// 若需要Spring容器托管Mapper,添加componentModel = "spring"配置,不需要可删除
@Mapper(componentModel = "spring")
public interface SourceTargetMapper {

    // 字段映射绑定:将源对象ids字段转换为目标对象myObjects字段,使用指定的转换方法
    @Mapping(source = "ids", target = "myObjects", qualifiedByName = "idToCustomObject")
    TargetDto sourceToTarget(SourceDto sourceDto);

    // 自定义id转CustomObject的逻辑
    @Named("idToCustomObject")
    default CustomObject idToCustomObject(Integer id) {
        CustomObject obj = new CustomObject();
        obj.setId(id);
        // 按外部API要求初始化name、slug为空字符串
        obj.setName("");
        obj.setSlug("");
        return obj;
    }
}

适配场景说明

  • 如果CustomObject是Java 16+的record不可变类型,转换方法可简化为:
    default CustomObject idToCustomObject(Integer id) {
        return new CustomObject(id, "", "");
    }
    
  • 若需要在ids为null时默认返回空列表,可在映射注解添加默认值配置:
    @Mapping(source = "ids", target = "myObjects", qualifiedByName = "idToCustomObject",
             defaultExpression = "java(new java.util.ArrayList<>())")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:27:02