2016-05-17 90 views
1
List<CustomerData> mapAddress(List<Address> addressList){ 

    List<Customer> customerData = new ArrayList<Customer>(); 

    if(CollectionUtils.isNotEmpty(addressList)){ 
     for(Address address : addressList) 
     { 
      customerData.add(this.dozerBeanMapper.map(address, Customer.class)); 
     } 
    } 
    return customerData; 
} 

CustomerData.java映射列表中列出推土機

Has instance field 'address' of type String 

Address.java

Has instance field 'mainLocation' of type String 

目前我使用for循環地址,每一個對象地圖客戶,我該如何直接映射addressListcustomerData(list to list)without looping。有人可以幫助我這個邏輯的XML文件更改。

回答

1

據我記得,沒有可能將收藏品映射到推土機上的收藏品。你需要迭代它。看看這個封閉的問題和原因:https://github.com/DozerMapper/dozer/issues/5

你可以做什麼來緩解痛苦會使用Java 8(如果可以的話)或番石榴的一些更具說明性的方式來處理該映射。

的Java 8例如:

<FROM, TO> List<TO> mapList(List<FROM> fromList, final Class<TO> toClass) { 
    return fromList 
      .stream() 
      .map(from -> this.dozerBeanMapper.map(from, toClass)) 
      .collect(Collectors.toList()); 
} 

番石榴例如:

<FROM, TO> List<TO> mapList(List<FROM> fromList, final Class<TO> toClass) { 
    return Lists.transform(fromList, new Function<FROM, TO>() { 
     @Override 
     public TO apply(FROM from) { 
      return this.dozerBeanMapper(from, toClass); 
     } 
    }); 
} 
+0

感謝資訊...其實我看到推土機文檔.. http://dozer.sourceforge.net/documentation/ collectionandarraymapping.html 在那裏,他們提到了它的可能,我試圖理解它,但我不能.. – Bharath

+0

是的,我已經看到了。但請注意,列表映射在「」級別上指定,而不是在「」上指定。這意味着它將適用於類中的列表字段。你也可以做的是創建一個包裝類與列表,而不是自動映射到另一個包裝與列表字段。如果你想自動將其映射到列表,我認爲自己的推土機轉換器將是必需的。 – gmaslowski

+0

是啊有你..我試圖使用java 8的例子,你已經提到上面,它提供的錯誤方法toList()是不明確的 – Bharath