2016-05-17 86 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