2013-01-17 10 views
12

Tôi đã tạo ánh xạ dozer cho ClassA thành ClassB.Lập bản đồ Danh sách các đối tượng với Dozer

Bây giờ, tôi muốn ánh xạ một số List<ClassA> tới List<ClassB>.

Có thể chỉ

mapper.map(variableListClassA, variableListClassB) 

hay tôi phải đi qua một vòng lặp, ví dụ

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

Trả lời

12

Bạn cần sử dụng vòng lặp, vì loại danh sách bị xóa khi chạy.

Nếu cả hai danh sách là một trường của một lớp, bạn có thể ánh xạ các lớp sở hữu.

+0

cảm ơn bạn cho câu trả lời và giải thích! – user1323246

11

bạn cũng có thể sử dụng một lớp helper để làm điều đó chỉ trong một bước

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

và cuộc gọi của bạn ở trên sẽ như thế nào

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

Hmm .. Câu trả lời tốt – Bhuvan

+0

sẽ không chính xác hơn khi thêm generics vào danh sách s1? như Danh sách s1 = new ArrayList(); – Turtletrail