gpt4 book ai didi

java - 使用 Dozer 将一种类型的列表转换为另一种类型的数组

转载 作者:行者123 更新时间:2023-11-30 07:36:58 25 4
gpt4 key购买 nike

我想知道如何使用 Dozer 在 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)

两者都不为我工作,谁能告诉我我做错了什么?如果我创建两个包装类,一个包含列表,另一个包含 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)的情况下做我想做的事?必须有一个更简单的方法......谢谢!

最佳答案

在开始迭代之前,您知道 listOfA 中有多少项。为什么不实例化 new 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);
}

关于java - 使用 Dozer 将一种类型的列表转换为另一种类型的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3066851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com