按日期分组Java
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按日期分组Java相关的知识,希望对你有一定的参考价值。
我有一个csv文件,其观察值约为500k,格式为“ date(LocalDate); hour; value; type”。我应该对这些数据执行操作,例如查找平均值,计算缺失值和日期间隔的值类型。
我可以在遍历字符串列表时构造每小时观察对象:
new HourlyObs(date,hour,val,type);
这些观察是每小时一次的(虽然由于某些数据丢失,每天不是24 obs),但是鉴于我应该实现的功能,我认为按日期对它们进行分组然后执行一些二进制搜索会更容易。
所以我的想法是创建一个对象数组,其中对象的设计如下:
class DailyObservation
private LocalDate date;
private ArrayList<HourlyObs>;
public float avgVal();
public int missingVals();
public float nrOfType();
是否有一种“简便”且有效的算法来创建这种日常观察数据?我无法解决这个问题,也不允许使用流进行聚合。非常感谢您的帮助。
答案
数据是否已排序?
如果已排序,则可以对其进行迭代,跟踪日期更改并相应地创建新对象。
[如果未对数据进行排序,那么最好的办法可能是创建一个地图,其中日期为键,DailyObservation
为值。对于数据的每个条目,请检查在给定日期的地图中是否已经存在对象。
另一答案
您可以设计如下:
class DailyObservation
private LocalDate date;
private Map<Integer, HourlyObservation> hourlyObservations = new HashMap<Integer, HourlyObservation>();
public float avgVal();
public int missingVals();
public float nrOfType();
public Map getHourlyObservations()
return hourlyObservations;
//Other setters and getters
在您的main
应用程序类中:
DailyObservation do = new DailyObservation();
do.getHourlyObservations().put("13", new HourlyObservation(do.getDate(), 13, some value, some type));
do.getHourlyObservations().put("14", new HourlyObservation(do.getDate(), 14, some value, some type));
以上是关于按日期分组Java的主要内容,如果未能解决你的问题,请参考以下文章