我想知道如何使用Dozer将Java中的一种类型的List转换为另一种类型的数组。这两种类型具有相同的属性名称/类型。 例如,考虑这两个类。
public class A{
private String test = null;
public String getTest(){
return this.test
}
public void setTest(String test){
this.test = test;
}
}
public class B{
private String test = null;
public String getTest(){
return this.test
}
public void setTest(String test){
this.test = test;
}
}
我试过这个没有运气。
List<A> listOfA = getListofAObjects();
Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();
B[] bs = mapper.map(listOfA, B[].class);
我也尝试过使用CollectionUtils类。
CollectionUtils.convertListToArray(listOfA, B.class)
两者都没有为我工作,谁能告诉我我做错了什么?如果我创建两个包装类,mapper.map函数工作正常,一个包含List,另一个包含b []。见下文:
public class C{
private List<A> items = null;
public List<A> getItems(){
return this.items;
}
public void setItems(List<A> items){
this.items = items;
}
}
public class D{
private B[] items = null;
public B[] getItems(){
return this.items;
}
public void setItems(B[] items){
this.items = items;
}
}
这很奇怪......
List<A> listOfA = getListofAObjects();
C c = new C();
c.setItems(listOfA);
Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();
D d = mapper.map(c, D.class);
B[] bs = d.getItems();
如果不使用包装类(C&amp; D),如何做我想做的事情?必须有一个更简单的方法...... 谢谢!
答案 0 :(得分:3)
在开始迭代之前,您知道listOfA中有多少项。为什么不实例化新的B [listOfA.size()]然后迭代A,将新的B实例直接放在数组中。您将为listOfB中的所有项目省去额外的迭代,并且代码实际上更容易读取以启动。
Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();
List<A> listOfA = getListofAObjects();
B[] arrayOfB = new B[listOfA.size()];
int i = 0;
for (A a : listOfA) {
arrayOfB[i++] = mapper.map(a, B.class);
}
答案 1 :(得分:1)
好的,所以我是个白痴。我太习惯了Dozer为我做的所有工作......我需要做的就是迭代A的列表并创建一个B列表,然后将该列表转换为B的数组。
Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();
List<A> listOfA = getListofAObjects();
Iterator<A> iter = listOfA.iterator();
List<B> listOfB = new ArrayList<B>();
while(iter.hasNext()){
listOfB.add(mapper.map(iter.next(), B.class));
}
B[] bs = listOfB.toArray(new B[listOfB.size()]);
解决了问题!
答案 2 :(得分:0)
如果我能编写下面的代码并且它可以正常工作
会更有意义List<A> listOfA = getListofAObjects();
Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();
B[] bs = mapper.map(listOfA, B[].class);