我想借助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中是否存在内置的可能性?
答案 0 :(得分:1)
如果每行代表不同的ObjectA
,那么我建议this answer(我最初认为您的问题类似于this)。
在阅读了你的评论后,这没有用。对于属于它的每个ObjectA
,都会重复ObjectB
列。
超级CSV无法为您组合这些内容,因此您需要将每个ObjectA
存储在地图中,例如
对于读取为ObjectA
bean的每一行(使用CsvDozerBeanMapper)
检查地图中是否有ObjectA
为
如果是,请将当前ObjectB
添加到其中进行更新
如果不是,则只需将其添加到地图
返回地图的值(规范化的ObjectA
)。
必须规范化的缺点是你必须将每个ObjectA
存储在内存中。