MapStruct: как преобразовать POJO в несколько объектов в соответствии с полем массива

#java #mapstruct

#java #структура карты

Вопрос:

ПОЙО:

 public class TestDto {
    private List<String> idList;
    private String name;
}
 

сущность:

 public class Test {
    private String id;
    private String name;
}
 

Если TestDto это idList так 1, 2, 3 , name abc то как я могу получить 3 соответствующих Test объекта с помощью MapStruct?

Ответ №1:

MapStruct не может выполнить это сопоставление за вас. Однако вы можете поиграть с несколькими исходными свойствами, чтобы добиться чего-то подобного:

например

 @Mapper
public interface TestMapper {


    default List<Test> map(TestDto dto) {
        if (dto == null || dto.getIdList() == null) {
            return null;
        }

        List<String> idList = dto.getIdList();
        List<Test> tests = new ArrayList<>(idList.size());
        for (String id: idList) {
            tests.add(map(id, dto);
        }

        return tests;
    }

    Test map(String id, TestDto dto);

}