java Mapstruct将列表Map到包含列表的对象

46qrfjad  于 2023-04-28  发布在  Java
关注(0)|答案(2)|浏览(189)

我想有一个双向Map从一个对象的列表到一个对象,其中包含一个列表。

class Person {
  String firstName;
  String lastName;
}

class Group { // Source
  List<Person> people;
  String groupID; 
  ...
}

class Employee { // target
  String firstName;
  String lastName;
  String employeeNumber;
  ...
}

我使用了报告政策。IGNORED:忽略所有不相关的字段。我只需要一个Group到List之间的Map,其中包含firstName和lastName字段。
有可能吗?我已经尝试过了,但是在构建过程中它给了我错误“不可能将可迭代Map到不可迭代。”

@Mapping(target="people", source".")
Group map(List<Employee>)
kiz8lqtg

kiz8lqtg1#

Mapstruct不支持此类Map。有关此问题,请参阅Mapstruct贡献者answer
与解决方法类似,您可以实现自己的Map方法来转换为 Package 类。

@org.mapstruct.Mapper
public interface Mapper {
    List<Person> map(List<Employee> employees);

    Person map(Employee employee);

    default Group mapGroup(List<Employee> employees) {
        Group group = new Group();
        group.people = map(employees);
        return group;
    }
}
kt06eoxx

kt06eoxx2#

MapStruct支持从源参数到目标参数的Map。这意味着您可以配置MapStruct以将源列表参数Map到目标列表属性。然而,正如https://stackoverflow.com/a/71181377/1115491中所指出的,不可能将单个集合参数Map到目标参数。唯一的工作方式是如果有多个源参数。
例如

@Mapper
public interface Mapper {

    @Mapping(target = "people", source = "employees")
    @Mapping(target = "groupID", source = "groupId")
    Group map(String groupId, List<Employee> employees);

}

相关问题