如何最好地将CSV中的数据存储在Java类中?是Row对象的单个列表,还是嵌套对象的单个对象?

杰克·弗雷尔(Jac Frall):
Date,Locality,District,New Cases,Hospitalizations,Deaths
5/21/2020,Accomack,Eastern Shore,709,40,11
5/21/2020,Albemarle,Thomas Jefferson,142,19,4
5/21/2020,Alleghany,Alleghany,9,4,0
5/21/2020,Amelia,Piedmont,22,7,1
5/21/2020,Amherst,Central Virginia,25,3,0
5/21/2020,Appomattox,Central Virginia,25,1,0
5/21/2020,Arlington,Arlington,1763,346,89
... // skipped down to the next day
5/20/2020,Accomack,Eastern Shore,709,39,11
5/20/2020,Albemarle,Thomas Jefferson,142,18,4
5/20/2020,Alleghany,Alleghany,10,4,0
5/20/2020,Amelia,Piedmont,21,7,1
5/20/2020,Amherst,Central Virginia,25,3,0
5/20/2020,Appomattox,Central Virginia,24,1,0
5/20/2020,Arlington,Arlington,1728,334,81
5/20/2020,Augusta,Central Shenandoah,88,4,1
... // continued

我在CSV中以上述方式在美国某州获得了数据,并希望对其进行一些数据分析,以便可以通过rest API发送该数据。我要进行的数据分析是各种汇总,例如:按日期划分的州总数,整个州的总数,按地区分组的总数,按日期划分的地区的总数,县的总数按日期等。可以使用此数据进行的所有基本分组依据。

现在,我的问题是弄清楚如何在没有数据库的情况下将数据正确存储在java中。我有一个使用Row对象列表的成功实现,其中每个Row对象在CSV中仅包含一行。然后,使用Java Stream api可以过滤并获得其中一些统计信息。然后,我将这些统计信息打包到单个Row对象或中List<Row>,并将其发送到API以解析为JSON。这行得通,但是我觉得这不是最好的方法。
是否有利用一些更加面向对象的方式DateDistrictCountyCases列。

我正在考虑做这样的事情:

class State {
     List<District> districtList;
     String name;
}

class District {
     List<County> countyList;
     String name;
}

class County {
     LocalDate date;
     String name;
     int cases;
     // more stuff
}

然后,我将创建一个State带有对象列表的District对象,每个County对象包含许多对象的列表,每个日期一个。

这看起来像是过度杀伤力吗?是否有其他干净的方法可以将此数据集读入数据结构,从而可以轻松汇总摘要信息。

我目前的操作方式现在可以使用,但我正在寻找更好的方法!

CStockton:

从您的描述来看,您的方法听起来不错,而且是正确的面向对象的。但是,如果没有其他信息(例如,可能需要另外说明的特定汇总),您在“区域”对象中可能会有多个“重复”的“县”对象似乎很奇怪。例如:

[{"date":"5/21/2020","name":"Accomack"},
 {"date":"5/20/2020","name":"Accomack"}]

从面向对象的角度来看,您似乎希望按“日期”(每个日期包含“县”行列表)进行附加级别的聚合。

一个考虑因素:如果您的聚合与数据库方法更好地匹配,我认为应该保留源数据中的每一行并查询AS / IS,并通过Stream lambda对其进行过滤和排序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章