Super-CSV:如何进行“CSV规范化”?

时间:2013-06-07 14:48:46

标签: csv normalization supercsv

我想借助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中是否存在内置的可能性?

1 个答案:

答案 0 :(得分:1)

如果每行代表不同的ObjectA,那么我建议this answer(我最初认为您的问题类似于this)。

在阅读了你的评论后,这没有用。对于属于它的每个ObjectA,都会重复ObjectB列。

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

  • 对于读取为ObjectA bean的每一行(使用CsvDozerBeanMapper)

    • 检查地图中是否有ObjectA

      • 如果是,请将当前ObjectB添加到其中进行更新

      • 如果不是,则只需将其添加到地图

      • 即可
  • 返回地图的值(规范化的ObjectA)。

必须规范化的缺点是你必须将每个ObjectA存储在内存中。