2011-08-26 10 views
18

To pytanie nie jest związane z AutoMapper. Moje pytanie dotyczy ModelMapper w java, jednak nie mogę utworzyć nowego tagu dla modelmapper jako mojej małej reputacji. Przepraszam za zamieszanie.Czy biblioteka ModelMapper obsługuje kolekcje takie jak ArrayList lub HashSet?

W każdym razie, moje pytanie brzmi, czy biblioteka obsługuje biblioteki takie jak arraylist czy hashset? wygląda na to, że nie obsługuje kolekcji do mapowania kolekcji. Czy to prawda?

Odpowiedz

2

Tak - obsługiwane jest odwzorowanie kolekcji na kolekcję. Ex:

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

W tym przykładzie został użyty dwie klasy otoki wokół zbiorów. Czy bez nich byłoby to możliwe? – miguelcobain

+0

@miguelcobain - Tak, owijki po prostu okazały się przykładem, który dałem. – Jonathan

29

Można także zbiory map() bezpośrednio:

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.

3

Można również uniknąć rzeczy TypeToken jeśli pracujesz z tablicami:

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