diff --git a/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/DepartmentMapper.java b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/DepartmentMapper.java new file mode 100644 index 000000000000..b822dcf347c9 --- /dev/null +++ b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/DepartmentMapper.java @@ -0,0 +1,25 @@ +package com.baeldung.mapstruct.iterable; + +import java.util.List; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import com.baeldung.mapstruct.iterable.model.Department; +import com.baeldung.mapstruct.iterable.model.Employee; + +@Mapper +public interface DepartmentMapper { + DepartmentMapper INSTANCE = Mappers.getMapper(DepartmentMapper.class); + + default Department map(List employees) { + Department department = new Department(); + department.setEmployees(employees); + return department; + } + + @Mapping(target = "employees", source = "employees") + @Mapping(target = "manager", source = "departmentManager") + Department mapWithManager(List employees, Employee departmentManager); +} \ No newline at end of file diff --git a/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Department.java b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Department.java new file mode 100644 index 000000000000..17c871c3e873 --- /dev/null +++ b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Department.java @@ -0,0 +1,25 @@ +package com.baeldung.mapstruct.iterable.model; + +import java.util.List; + +public class Department { + + private List employees; + private Employee manager; + + public List getEmployees() { + return employees; + } + + public void setEmployees(List employees) { + this.employees = employees; + } + + public Employee getManager() { + return manager; + } + + public void setManager(Employee manager) { + this.manager = manager; + } +} \ No newline at end of file diff --git a/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Employee.java b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Employee.java new file mode 100644 index 000000000000..873edd55d424 --- /dev/null +++ b/mapstruct-2/src/main/java/com/baeldung/mapstruct/iterable/model/Employee.java @@ -0,0 +1,31 @@ +package com.baeldung.mapstruct.iterable.model; + +public class Employee { + + private String name; + private String phoneNumber; + + public Employee() { + } + + public Employee(String name, String phoneNumber) { + this.name = name; + this.phoneNumber = phoneNumber; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } +} \ No newline at end of file diff --git a/mapstruct-2/src/test/java/com/baeldung/mapstruct/iterable/DepartmentMapperTest.java b/mapstruct-2/src/test/java/com/baeldung/mapstruct/iterable/DepartmentMapperTest.java new file mode 100644 index 000000000000..e1f116df8a28 --- /dev/null +++ b/mapstruct-2/src/test/java/com/baeldung/mapstruct/iterable/DepartmentMapperTest.java @@ -0,0 +1,51 @@ +package com.baeldung.mapstruct.iterable; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.util.Arrays; +import java.util.List; + +import org.junit.jupiter.api.Test; + +import com.baeldung.mapstruct.iterable.model.Department; +import com.baeldung.mapstruct.iterable.model.Employee; + +public class DepartmentMapperTest { + + private final DepartmentMapper departmentMapper = DepartmentMapper.INSTANCE; + private final List employees = Arrays.asList( + new Employee("John", "(555)1111-1234"), + new Employee("Jane", "(555)2222-4321") + ); + + @Test + void givenListOfEmployees_whenMapDepartment_thenAssertMappingIsSuccessful() { + Department department = departmentMapper.map(employees); + + assertNotNull(department); + assertNotNull(department.getEmployees()); + assertEquals(employees.size(), department.getEmployees().size()); + assertEquals(employees.get(0).getName(), department.getEmployees().get(0).getName()); + assertEquals(employees.get(0).getPhoneNumber(), department.getEmployees().get(0).getPhoneNumber()); + assertEquals(employees.get(1).getName(), department.getEmployees().get(1).getName()); + assertEquals(employees.get(1).getPhoneNumber(), department.getEmployees().get(1).getPhoneNumber()); + } + + @Test + void givenListOfEmployeesAndManager_whenMapDepartment_thenAssertMappingIsSuccessful() { + Department department = departmentMapper.mapWithManager(employees, employees.get(0)); + + assertNotNull(department); + assertNotNull(department.getEmployees()); + assertEquals(employees.size(), department.getEmployees().size()); + assertEquals(employees.get(0).getName(), department.getEmployees().get(0).getName()); + assertEquals(employees.get(0).getPhoneNumber(), department.getEmployees().get(0).getPhoneNumber()); + assertEquals(employees.get(1).getName(), department.getEmployees().get(1).getName()); + assertEquals(employees.get(1).getPhoneNumber(), department.getEmployees().get(1).getPhoneNumber()); + + assertNotNull(department.getManager()); + assertEquals(department.getManager().getName(), department.getEmployees().get(0).getName()); + assertEquals(department.getManager().getPhoneNumber(), department.getEmployees().get(0).getPhoneNumber()); + } +} \ No newline at end of file