2013-01-17 26 views
12

我爲ClassA創建了ClassB的推土機映射。使用推土機映射對象列表

現在我想將List<ClassA>映射到List<ClassB>

是否有可能只是

mapper.map(variableListClassA, variableListClassB) 

還是我給一個環路的走了過來,例如

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

回答

12

您需要使用循環,因爲列表的類型在運行時會被刪除。

如果兩個列表都是一個類的字段,則可以映射擁有的類。

+0

謝謝你的回答和解釋! – user1323246

11

你也可以使用一個輔助類來做到一步到位

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

,您的電話上面會像

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

嗯..好的答案 – Bhuvan

+0

將仿製藥添加到s1列表不是更正確嗎? like List s1 = new ArrayList(); – Turtletrail