2013-01-17 9 views
12

Ho creato una mappatura dozer per ClassA in ClassB.Mapping Elenchi di oggetti con Dozer

Ora voglio mappare un List<ClassA> a List<ClassB>.

E 'possibile solo

mapper.map(variableListClassA, variableListClassB) 

o devo andare oltre un ciclo, per esempio

for (ClassA classA : variableListClassA) { 
    variableListClassB.add(mapper.map(classA, ClassB.class)) 
} 

risposta

12

È necessario utilizzare il ciclo, poiché il tipo dell'elenco viene cancellato in fase di esecuzione.

Se entrambe le liste sono un campo di una classe, è possibile mappare le classi proprietarie.

+0

grazie per la risposta e la spiegazione! – user1323246

11

Si potrebbe anche usare una classe di supporto di farlo in un solo passo

public class DozerHelper { 

    public static <T, U> ArrayList<U> map(final Mapper mapper, final List<T> source, final Class<U> destType) { 

     final ArrayList<U> dest = new ArrayList<U>(); 

     for (T element : source) { 
     if (element == null) { 
      continue; 
     } 
     dest.add(mapper.map(element, destType)); 
    } 

    // finally remove all null values if any 
    List s1 = new ArrayList(); 
    s1.add(null); 
    dest.removeAll(s1); 

    return dest; 
} 
} 

e la chiamata sopra sarebbe come

List<ClassB> listB = DozerHelper.map(mapper, variableListClassA, ClassB.class); 
+0

Hmm .. Buona risposta – Bhuvan

+0

non sarebbe più corretto aggiungere i generici alla lista s1? come Elenco s1 = new ArrayList(); – Turtletrail