ModelMapper库是否支持ArrayList或HashSet等集合?

时间:2011-08-26 04:05:13

标签: java modelmapper

此问题与AutoMapper无关。 我的问题是关于java中的ModelMapper,但我无法为modelmapper创建新的标签作为我的小声誉。抱歉混淆。

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

5 个答案:

答案 0 :(得分:49)

您还可以直接映射集合():

    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);

Documentation on mapping Generics

答案 1 :(得分:4)

是 - 支持Collection to Collection映射。例如:

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"));
}

答案 2 :(得分:3)

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

  List<PropertyDefinition<?>> list = ngbaFactory.convertStandardDefinitions(props);
  ModelMapper modelMapper = new ModelMapper();
  PropertyDefinitionDto[] asArray = modelMapper.map(list, PropertyDefinitionDto[].class);

答案 3 :(得分:1)

或使用Java 8:

List<Target> targetList =
    sourceList
        .stream()
        .map(source -> modelMapper.map(source, Target.class))
        .collect(Collectors.toList());

答案 4 :(得分: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

适度使用(或不使用)。