首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SuperCSV和Dozer

SuperCSV和Dozer
EN

Stack Overflow用户
提问于 2014-03-02 23:23:59
回答 1查看 945关注 0票数 0

我正在构建一个软件,其中输入的是csv文件数据,它可以在单个文件中包含90k和行数据。

仅仅为了通知文件将根本没有标题行,它将从数据本身开始。

通过谷歌,我来到超级csv和推土机地图扩展。我无法找到一个例子,说明在阅读单个csv行时,Pojo中有许多其他Pojo。

我的客户Pojo看起来像下面的快照..。

代码语言:javascript
复制
class CustomerPojo {

    private Id<CustomerId> customerId;

    private String lookupCode;

    // enum type  
    private QuoteType quoteType;

    private String bCovCa;
    private Money bCovRa;


    private String recommCovCa;
    private Money recommCoveRa;

    private Date insertedDate;

    private String pdfName;

    private List<VehicleInfo> vehicleInfoPojoList;

    private List<Address> addressList;

    // All setter-getter
}

可以给一些指导,我太阅读网站,但它有简单的例子,因为日常软件有多种关联和自定义数据类型。

代码语言:javascript
复制
Thanks in advance.
EN

回答 1

Stack Overflow用户

发布于 2014-03-03 03:55:56

没有标题是好的-只是要知道超级CSV配置将是静态的(即硬编码),因为您必须显式定义CSV的结构。请注意,您不需要调用beanReader.getHeader(),因为文件的第一行是数据,而不是头。

如果每个客户映射到CSV文件中的1行,那么您应该能够像在网站上的示例中一样配置超级CSV。

例如,如果您的CSV如下所示:

代码语言:javascript
复制
1,1 First St,London,1 First Rd,New York,111AAA,111BBB
2,2 Second St,Paris,2 Second Rd,Munich,222AAA,222BBB

您的bean映射(基于您的POJO)可能如下所示:

代码语言:javascript
复制
new String[]{"customerId", "addressList[0].street", "addressList[0].city",   
    "addressList[1].street",  "addressList[1].city", 
    "vehicleInfoPojoList[0].rego", "vehicleInfoPojoList[1].rego"}

Dozer将实例化必要的VehicleInfo和Address类以及列表。如果没有第二辆车雷戈,那么Dozer就不应该在车辆列表中填充第二个元素。

您会注意到,因为每个客户都映射到一行,所以可以使用索引映射,因为始终有固定数量的地址/车辆等。

如果每个客户跨多行,那么就不那么容易了。

在这种情况下,我可能会建议阅读每一行/客户,如果您找到相同的客户(即customerId),然后将新地址/车辆等复制到现有客户。

或者,您可以编写自己的单元处理器(如这里),也可以查看Dozer的迭代法功能是否有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22135091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档