2010-06-18 70 views
2

我想知道如何将一种类型的列表转换为Java中使用推土机的另一种类型的数组。这两种类型具有所有相同的属性名称/类型。例如,考虑这两个类。将一种类型的列表转换为使用推土机的另一种类型的数组

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) 

这两个都不适合我,谁能告诉我我做错了什么?如果我创建了两个包装类,其中一个包含List,另一个包含b [],mapper.map函数可以正常工作。请看下图:

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 & d)?有一个更简单的方法... 谢谢!

+1

在你最后上市的有一个错字,映射命令应该是:d d = mapper.map(C ,D.class);试图了解你的问题和例子。 – 2010-11-18 15:47:43

+0

谢谢,更正。 – aheuermann 2011-09-03 02:53:05

回答

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); 
} 
+0

你说得对,谢谢你的建议。 – aheuermann 2010-06-21 18:48:29

1

好吧,我是个白痴。我太习惯于推土机为我做所有的工作......我所需要做的就是遍历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()]); 

问题解决了!

0

它会更有意义,如果我可以写下面的代码和它的作品

List<A> listOfA = getListofAObjects(); 
Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance(); 
B[] bs = mapper.map(listOfA, B[].class); 
+1

Namrata,我添加了一些空间到您的文章,以使其格式正确。您应该阅读格式帮助。只需点击下次发布时文本框旁边的“帮助”链接即可。 – 2011-05-06 12:55:50

相关问题