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。这行得通,但是我觉得这不是最好的方法。
是否有利用一些更加面向对象的方式Date
,District
,County
,Cases
列。
我正在考虑做这样的事情:
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
对象包含许多对象的列表,每个日期一个。
这看起来像是过度杀伤力吗?是否有其他干净的方法可以将此数据集读入数据结构,从而可以轻松汇总摘要信息。
我目前的操作方式现在可以使用,但我正在寻找更好的方法!
从您的描述来看,您的方法听起来不错,而且是正确的面向对象的。但是,如果没有其他信息(例如,可能需要另外说明的特定汇总),您在“区域”对象中可能会有多个“重复”的“县”对象似乎很奇怪。例如:
[{"date":"5/21/2020","name":"Accomack"},
{"date":"5/20/2020","name":"Accomack"}]
从面向对象的角度来看,您似乎希望按“日期”(每个日期包含“县”行列表)进行附加级别的聚合。
一个考虑因素:如果您的聚合与数据库方法更好地匹配,我认为应该保留源数据中的每一行并查询AS / IS,并通过Stream lambda对其进行过滤和排序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句