java - java 按日期分组

标签 java group-by

我有一个 csv 文件,其中包含大约 500k 的观测值,格式为“日期(LocalDate);小时;值;类型”。我应该对这些数据执行操作,例如查找平均值、计算缺失值以及日期间隔的值类型。

我可以在循环字符串列表时构造每小时观察对象:

new HourlyObs(date,hour,val,type);

这些观察结果是每小时一次(虽然不是每天 24 个观测值,因为缺少一些数据),但我认为考虑到我应该实现的功能,按日期对它们进行分组然后执行一些二进制搜索会更容易。

所以我的想法是创建一个对象数组,其中对象的设计如下:

class DailyObservation {

private LocalDate date;
private ArrayList<HourlyObs>; 

public float avgVal();
public int missingVals();
public float nrOfType();}

是否有一种“简单”且有效的算法来创建这组日常观察数据?我无法理解它,也不允许使用流进行聚合。 非常感谢您的帮助。

最佳答案

数据排序了吗?

如果它已排序,那么您可以对其进行迭代,跟踪日期更改并相应地创建新对象。

如果数据未排序,那么最好的想法可能是创建一个 map ,其中日期是键,DailyObservation 是值。对于每个数据条目,您检查给定日期的 map 中是否已存在对象。

编辑:

对于排序的数据,您可以尝试这样的操作:

public List<DailyObservation> parseObservations(){
    List<DailyObservation> results = new ArrayList<>();
    DailyObservation current = new DailyObservation();
    String[] line;

    while((line=readLine()) != null){
        String dateString = line[0];
        LocalDate localDate = LocalDate.parse(dateString);

        if (!localDate.equals(current.getDate())){
            current = new DailyObservation();
            results.add(current);
        }

        HourlyObs hourlyObs = new HourlyObs();
        //
        //  assign data from lie to the hourlyObs however you want
        //      
        current.addHourlyObs(hourlyObs);
    }
    return results;
}

关于java - java 按日期分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60490947/

相关文章:

php - mysql php COUNT 按列 GROUP BY 中的相同值进行回显

Java - Spring boot - 集成测试 - TestEntityManager 未注入(inject)

Java 面向对象编程对象范围

java - 编写代码的良好实践包含许多选项,例如 switch 和 if 条件

mysql - 如何在MySQL中查询concat、group_concat、group by进行多个子查询

mysql - 按城市分组年龄

MySQL - 如何根据单列查找重复行?

java - 避免多个 Singleton 实例?

console - System.out 什么时候不会出现在 Java 控制台中?

sql - 选择 ID、计数 (ID) 和按日期分组