【发布时间】:2013-02-14 20:45:27
【问题描述】:
我正在尝试使用 SuperCSV 和 Dozer 是否可以做到这一点,或者我是否应该恢复到 Map 解析。我有一个具有 Map 成员字段的 POJO。值得庆幸的是,在 CSV 解析期间,我知道应该构建 MyInterface 的哪个特定子类,并且 MyEnum 的值也是静态的。但是我将如何在列映射中设置所有这些?谢谢!
目前,我的单元处理器具有这种结构,并且我正在使用 CsvMapReader。
private static final CellProcessor[] CELL_PROCESSORS = new CellProcessor[] {
new NotNull(new Trim(new StrRegEx("^\\d{10,}$"))), // phone1
new Optional(new Trim(new StrRegEx("^\\d{10,}$"))), // phone2
new Optional(new Trim(new StrRegEx("^\\d{10,}$"))), // phone3
new Optional(new Trim()), // callVar1
new Optional(new Trim()), // callVar2
new Optional(new Trim()), // callVar3
new Optional(new Trim()), // callVar4
new Optional(new Trim()), // callVar5
new Optional(new Trim()), // callVar6
new Optional(new Trim()), // callVar7
new Optional(new Trim()), // callVar8
new Optional(new Trim()), // callVar9
new Optional(new Trim()), // callVar10
};
private Contact mapRowToContact(Map<String, Object> row) {
Contact contact = new Contact();
MyPhoneContactMethodData methodData = new MyPhoneContactMethodData();
List<Phone> phones = new ArrayList<>();
Phone phone = new Phone();
phone.setPhoneNumber((String)row.get("phone1"));
phones.add(phone);
phone = new Phone();
phone.setPhoneNumber((String)row.get("phone2"));
if (phone.getPhoneNumber() != null) {
phones.add(phone);
}
phone = new Phone();
phone.setPhoneNumber((String)row.get("phone3"));
if (phone.getPhoneNumber() != null) {
phones.add(phone);
}
methodData.setPhones(phones);
List<String> callVars = new ArrayList<>();
callVars.add((String)row.get("callVar1"));
callVars.add((String)row.get("callVar2"));
callVars.add((String)row.get("callVar3"));
callVars.add((String)row.get("callVar4"));
callVars.add((String)row.get("callVar5"));
callVars.add((String)row.get("callVar6"));
callVars.add((String)row.get("callVar7"));
callVars.add((String)row.get("callVar8"));
callVars.add((String)row.get("callVar9"));
callVars.add((String)row.get("callVar10"));
methodData.setEnterpriseCallVarData(callVars);
Map<ContactMethod, ContactMethodData> methodDataMap = new HashMap<>();
methodDataMap.put(ContactMethod.PHONE, methodData);
contact.setContactMethodData(methodDataMap);
return contact;
}
Contact 具有这种结构,还有许多其他不相关的字段:
public class Contact {
private Integer id;
private Map<ContactMethod, ContactMethodData> contactMethodData;
}
ContactMethod 是一个枚举,其值为PHONE 和EMAIL。
ContactMethodData是一个接口,MyPhoneContactMethodData的超类实现了这个接口。
【问题讨论】:
-
你能发布一些示例代码吗?我是一名超级 CSV 开发人员 - 我可以提供帮助,但前提是我了解问题所在! :)
标签: map enums subclass supercsv