31

这个问题与 AutoMapper 无关。我的问题是关于 java 中的 ModelMapper,但是我无法为 modelmapper 创建新标签,因为我的名声很小。很抱歉造成混乱。

无论如何,我的问题是modelmapper库是否支持 arraylist 或 hashset 之类的集合?它似乎不支持集合到集合的映射。这是真的吗?

4

5 回答 5

62

也可以直接map collections():

    List<Person> persons = getPersons();
    // Define the target type
    java.lang.reflect.Type targetListType = new TypeToken<List<PersonDTO>>() {}.getType();
    List<PersonDTO> personDTOs = mapper.map(persons, targetListType);

关于映射泛型的文档

于 2013-07-29T08:41:03.903 回答
8

或者使用 Java 8:

List<Target> targetList =
    sourceList
        .stream()
        .map(source -> modelMapper.map(source, Target.class))
        .collect(Collectors.toList());
于 2019-03-22T15:22:12.650 回答
5

如果您使用数组,您还可以避免使用 TypeToken :

  List<PropertyDefinition<?>> list = ngbaFactory.convertStandardDefinitions(props);
  ModelMapper modelMapper = new ModelMapper();
  PropertyDefinitionDto[] asArray = modelMapper.map(list, PropertyDefinitionDto[].class);
于 2017-01-19T13:48:42.957 回答
4

是 - 支持集合到集合的映射。前任:

static class SList {
    List<Integer> name;
}

static class DList {
    List<String> name;
}

public void shouldMapListToListOfDifferentTypes() {
    SList list = new SList();
    list.name = Arrays.asList(Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3));
    DList d = modelMapper.map(list, DList.class);

    assertEquals(d.name, Arrays.asList("1", "2", "3"));
}
于 2012-07-25T16:55:18.873 回答
1

即使所有答案都以他们自己的方式正确,我也想分享一个相当简化和简单的方法。对于这个例子,假设我们有一个来自数据库的实体列表,我们想映射到他各自的 DTO。

Collection<YourEntity> ListEntities = //GET LIST SOMEHOW;
Collection<YourDTO> ListDTO = Arrays.asList(modelMapper.map(ListEntities, YourDTO[].class));

您可以阅读更多内容:https ://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html

您仍然可以使用更老派的方式来做到这一点:https ://www.baeldung.com/java-modelmapper-lists

适度使用(或不使用)。

于 2021-04-10T20:00:29.963 回答