按日期分组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的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 按 ID 分组,然后按日期分组

按外键和日期分组数据,按日期汇总

使用熊猫按日期范围分组

按日期对 Pandas DataFrame 进行分组

嵌套字典:按日期分组,然后按枚举值分组并汇总计数

按日期范围分组