java - 来自 CSV 的 BeanIO 读取字段,代表一个集合
问题描述
我有一个带有;
分隔符的 CSV 文件,但在其中一个字段中,它表示带有|
分隔符的对象:
field1;field2;field3;"field-4.1;field-4.2|field-4.1;field-4.2";field5;field6;
所以问题在于field4
哪个表示由管道分隔的多个对象。
其实我的模板是这样的:
<record name="fields" class="br.com.beanio.MyPojo">
<field name="field1"/>
<field name="field2"/>
<field name="field3"/>
<segment name="fields4" minOccurs="0" collection="list" class="br.com.beanio.MySubPojo">
<field name="field4-1" />
<field name="field4-2" />
</segment>
<field name="field5"/>
<field name="field6"/>
</record>
我尝试使用不同的属性来识别 field4 何时代表一个新对象,但没有奏效。
如何使用 beanIO 模板读取字段 4?
提前致谢
解决方案
我的解决方案是为该字段创建一个 typeHandler:
public class MyCustomTypeHandler implements TypeHandler {
在我的模板中,我使用 typeHandler:
<field name="fieldWithList" typeHandler="MyCustomTypeHandler"/>
因此,在 typeHandler 的 parse 方法中,我可以处理该字段:
if (nonNull(text)) {
asList(text.split("\\|")).forEach(str -> {
String[] fields = str.split(";", -1);
// process and add items to the list
});
}
推荐阅读
- python - 散列numpy对象数组,hashlib如何查看对象的内容而不仅仅是指针?
- c++ - clang 在 macOS 中编译到哪个版本的 c++?
- sql - 比较日期和数据列
- java - 等待 JButton 被按下
- unix - 使用 txt 文件中列出的序列 ID(不带版本号)提取 FASTA 序列(带版本号)
- java - 如何从对象中只绑定一个字段?
- file-upload - 使用 Alfresco 共享表单页面,如何上传包含元数据的新文件?
- eclipse - IDE Eclipse 不链接到其他打开的项目,而是链接到它的 jar
- java - 同一台机器上不同项目对调用相同 API 的不同反应 -> SSLException
- amazon-web-services - 如何将 AWS Cloudwatch 资源指标数据点保存在其他数据库中