java 按日期分组 算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 按日期分组 算法相关的知识,希望对你有一定的参考价值。

有一批500件的货物,同一个月份生产,但日期不同,求一算法计算该月每天生产的货物数量。。如何实现?
不一定该月每天都有生产
id date(生产日期)
1 2号
2 3号
3 4号
4 2号
。 。
。 。
。 。
结果:
1号 0(可不进行统计)
2号 2
3号 1
4号 1
。 。
。 。

直接用SQL语句
select count(id) as 数量,day(date) as 生产日期 from table group by day(date) order by day(czrq)

如果库里不止一个月的数据,那么再加个where条件
参考技术A 这个是数据库里面的内容?
那就select count(*),date from 表 group by date
参考技术B 都不知道你想在数据库里面算还是程序里面算。? 参考技术C 这些数据是存放在数据库的表里的吗,如果是可以用sql语句来解决 参考技术D 楼主如果还没有搞定,可以直接联系我,我帮你看看,这个很容易,

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

Java将List中的实体按照某个字段进行分组的算法

Java将List中的实体按照某个字段进行分组的算法

按相似度对数据进行分组的最佳算法(相同 ID)

按日期分组Java

知了堂学习笔记java 编写几种常见排序算法3

希尔排序算法-java