gpt4 book ai didi

java - SuperCSV 和推土机

转载 作者:行者123 更新时间:2023-12-01 13:19:49 24 4
gpt4 key购买 nike

我正在开发一款软件,其中输入是 csv 文件数据,单个文件中可以包含 90k 多行数据。

只是为了通知文件根本不会有标题行,它将以数据本身开始。

通过谷歌搜索,我找到了 super csv 和推土机映射器扩展。我无法找到一个示例,说明在读取单个 csv 行时可以用许多其他 pojo 集合填充 Pojo。

我的客户 Pojo 如下图所示...

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
}

能否提供一些指导,我也在浏览该网站,但它有简单的示例,其中日常软件具有多种关联和自定义数据类型。

Thanks in advance.

最佳答案

没有 header 也可以 - 只需注意 Super CSV 配置将是静态的(即硬编码),因为您必须显式定义 CSV 的结构。请注意,您不需要调用 beanReader.getHeader(),因为文件的第一行是数据,而不是 header 。

如果每个客户映射到 CSV 文件中的 1 行,那么您应该能够按照 examples 中的相同方式配置 Super CSV。在网站上。

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

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)可能类似于:

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),则将新地址/车辆等复制到现有客户。

或者,您可以尝试编写自己的单元处理器(如 here 所做的那样),或者看看 iterate-method 是否Dozer 的功能可能会有所帮助。

关于java - SuperCSV 和推土机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22135091/

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