我有一个列表列表,我试图使用Dozer和Custom Converter映射到二维数组[] []。
receivedData = receivedData.replaceAll("(\\n)", "");
转换器只应用于public class Field {
List<String> items;
public void add(String s) {
items.add(s);
}
}
public class ClassA {
int anotherVariable;
List<Field> fields;
public void add(Field f) {
fields.add(f);
}
}
public class ClassB {
int anotherVariable;
String[][] itemValues;
}
@Test
public void convertListTo2DArray() {
Field field1 = new Field();
field1.add("m"); field1.add("n");
Field field2 = new Field();
field2.add("o"); field2.add("p");
ClassA classA = new ClassA();
classA.add(field1);
classA.add(field2);
classA.setAnotherVariable(99);
List<Converter> converters = new ArrayList<Converter>();
converters.add(new ListToArrayConverter());
ClassB classB = new DozerBeanMapper().setCustomConverters(converters).map(classA, ClassB.class);
/**
* Result:
* classB -> anotherVariable = 99
*
* classB -> itemValues[][] =
* ["m", "n"]
* ["o", "p"]
*/
}
和List<List>
之间的转换,而不能用于其他变量。
我看了下面问题的答案,但是如何处理Array而不是Custom Converter中的Set / List? Dozer Mapping from HashSet to Arraylist
我们非常感谢任何建议。 感谢
答案 0 :(得分:1)
我的java有点生疏,请耐心等待。
如果您希望转换器仅用于将List转换为String数组而不是其他任何内容,则可以限制它的一种方法是为xml中的那两个字段指定自定义转换器:
<mapping>
<class-a>beans6.ClassA</class-a>
<class-b>beans6.ClassB</class-b>
<field custom-converter="converter.ConvertListToArray">
<a>fields</a>
<b>itemValues</b>
</field>
</mapping>
接下来,items
类中的Field
属性和fields
类中的ClassA
属性需要初始化为arraylists以防止它们抛出{{1} }}
NullPointerException
最后,这是CustomConverter,假设添加到List<String> items = new ArrayList<String>();
List<Field> fields = new ArrayList<Field>();
的元素数总是不变的:
fields