Nested list mapping using MapStruct

这一生的挚爱 提交于 2020-12-29 07:38:05

问题


How can I do the bean mapping using MapStruct for the below scenario.

class Source {
private String sourceId;
private List<Course> courses;  //always returns only one course
}

class Course {
private String courseName;
private List<Student> students; 
}

class Student {
private String studentName;
}

class Target {
private String targetId;
private String subjectName;
private List<Member> members;
}

class Member {
private String memberName;
}

Now I want to map sourceId to targetId, courseName to subjectName, studentName to memberName(list to list).


回答1:


First of all is Source contains always one course why not make it a Course element instead of a List?

If you do that the mapping would be much simpler. With your current setup it is a bit more complex.

@Mapper
public interface MyMapper {

    @Mapping(target = "targetId", source = "sourceId")
    @Mapping(target = "subjectName", source = "courses")
    @Mapping(target = "members", source = "courses")
    Target map(Source source);

    default String subjectName(List<Course> courses) {
        if (courses == null || courses.isEmpty()) {
            return null;
        }
        return courses.get(0).getCourseName();
    }

    default List<Member> toMembersFromCourses(List<Course> courses) {
        if (courses == null || courses.isEmpty()) {
            return null;
        }
        return toMembers(courses.get(0).getStudents());
    }

    List<Member> toMembers(List<Student> students);

    @Mapping(target = "memberName", source = "studentName")
    Member toMember(Student student);
}

If Course is not a list. then you can do it more elegant with 1.2.0.Final.

@Mapper
public interface MyMapper {

    @Mapping(target = "targetId", source = "sourceId")
    @Mapping(target = "subjectName", source = "course.courseName")
    @Mapping(target = "members", source = "course.students")
    Target map(Source source);

    @Mapping(target = "memberName", source = "studentName")
    Member toMember(Student student);
}


来源:https://stackoverflow.com/questions/46841093/nested-list-mapping-using-mapstruct

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!