2

我有一个Map<DateTime,Integer> rawCount,其中包含每个日期的原始计数(a time-series)。

我想构建一个聚合映射,其中包含特定时间间隔内的计数。

例如,如果duration = (1000*1*60*60)start = new DateTime()此映射将包含从现在到 rawCount 映射中的最后一个日期的每小时总计数。

我正在使用JodaTime, as Intervalis not Comparable 并且我希望地图从最近到最旧的日期进行排序,使用 aTreeMap是不可能的。

我很困惑哪个Object最适合我的用例(Interval合适?)以及如何编写这个函数。

4

1 回答 1

2

这就是我将如何解决它。

Map<DateTime,Integer> rawCount = ....
DateTime start = ....
long duration = 1*60*60*1000;

DateTime lastDate = start;
// find the last date
for (DateTime dateTime : rawCount.keySet()) {
    if (dateTime.isAfter(lastDate))
        lastDate = dateTime;
}
int intervals = (int) ((lastDate.getMillis() - start.getMillis())/duration) + 1;
int[] counts = new int[intervals];
for (Map.Entry<DateTime, Integer> entry : rawCount.entrySet()) {
    DateTime key = entry.getKey();
    int interval = (int) ((key.getMillis() - start.getMillis()) / duration);
    counts[interval] += entry.getValue(); 
}
于 2013-01-10T11:48:25.957 回答