0

我想在 Super-CSV-Dozer API 的帮助下进行 CSV 规范化。

我有一个 CSV 文件,格式如下:

ObjectA_ID,ObjectA_Name,ObjectB_ID,ObjectB_Name
1,A_Name1,10,B_Name1
1,A_Name1,11,B_Name2
1,A_Name1,12,B_Name3
...
2,A_Name2,20,B_Name11
2,A_Name2,21,B_Name12
2,A_Name2,22,B_Name13
...

并且在阅读了这个文件(例如通过CsvDozerBeanReader)之后,我希望以 bean 的形式对这些数据进行标准化表示,例如:

Class ObjectA {
    private long id;
    private String name;
    private Collection objectBs;
    ...
}

Class ObjectB {
    private long id;
    private String name;
    ...
}

Super-CSV-Dozer 中是否有内置的可能性?

4

1 回答 1

1

如果每一行代表不同ObjectA,那么我会推荐这个答案(我最初认为你的问题类似于这个)。

但是,在阅读了您的评论后,这将无济于事。ObjectA每个ObjectB属于它的列都会重复。

Super CSV 无法为您组合这些,因此您需要将每个存储ObjectA在地图中,例如

  • 对于作为ObjectAbean 读取的每一行(使用 CsvDozerBeanMapper)

    • 检查ObjectA地图中是否有 id

      • 如果是,则通过将当前添加ObjectB到它来更新它

      • 如果没有,那么只需将其添加到地图

  • 返回地图的值(标准化ObjectA的)。

必须标准化的缺点是您必须将每一个都存储ObjectA在内存中。

于 2013-06-08T02:14:04.373 回答