java - java - 如何在Java类中最好地存储来自CSV的数据?单个 Row 对象列表,还是具有嵌套对象的单个对象?
问题描述
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 中有上述美国州的数据,并且想对其进行一些数据分析,以便我可以通过休息 API 发送它。我想做的数据分析是各种聚合,例如:按日期全州总病例数、全州总病例数、按地区分组的总病例数、按日期分地区的总病例数、县的总病例数按日期等。只是可以使用此数据进行的所有基本分组。
现在,我的问题是弄清楚如何在没有数据库的情况下正确地将这些数据存储在 java 中。我有一个使用 Row 对象列表的成功实现,其中每个Row
对象仅包含 CSV 中的一行。然后使用 java 的Stream api
我已经能够过滤并获得其中一些统计数据。然后,我将这些统计信息打包到单个Row
对象或 aList<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
对象的列表,每个日期一个。
这看起来是不是有点矫枉过正?是否有其他一些干净的方法可以将此数据集读入允许轻松汇总摘要信息的数据结构。
我目前正在做的方式现在有效,但我正在寻找更好的方式!
解决方案
根据您的描述,您的方法似乎是合理的,并且是面向对象的。但是,如果没有其他信息(例如,可能另有规定的特定聚合),您的 District 对象中有多个“重复的”“County”对象似乎很奇怪。例如:
[{"date":"5/21/2020","name":"Accomack"},
{"date":"5/20/2020","name":"Accomack"}]
从面向对象的角度来看,您似乎需要一个额外的聚合级别,按“日期”(每个日期包含一个“县”行列表)。
一个考虑因素:如果您的聚合与数据库方法更好地对齐,我认为源数据中的每一行都应该按原样保留和查询,通过 Stream lambdas 过滤和排序。
推荐阅读
- css - alignItem:中心在包含材质按钮的 flex 容器中不起作用
- javascript - Vuelidate 问题与 requireif 中的“this”引用
- python - 如何定义一个函数以基于另一个变量创建具有特定名称的变量?(Python 3)
- salesforce - 是否可以直接执行非测试 Apex 代码?
- dask - Dask 计算(以捕获错误),但将结果保留在工作人员身上
- ios - 从结构访问信息
- html - 当有图像时,jQuery问题仅从表格单元格中选择文本
- swift - dyld:未加载库:在实际 iPhone 上安装时
- c++ - 使用具有自动范围和结构化绑定的 C++ 迭代向量矩阵?
- javascript - 我试图访问 DOM 中无线电输入的名称属性,但显然所有名称字段的值都为 false?