我有Map<DateTime,Integer> rawCount
,其中包含每个日期的原始计数(time-series
)。
我想构建一个聚合地图,它将包含特定时间间隔内的计数。
例如,如果duration = (1000*1*60*60)
和start = new DateTime()
此地图将包含从现在到rawCount地图中最后一个日期的每小时总计数。
我正在使用JodaTime
,因为Interval
不可比,我希望从最近到最早的日期订购地图,使用TreeMap
是不可能的。< / p>
我很困惑哪个Object
最适合我的用例(Interval
是否合适?)以及如何编写此函数。
答案 0 :(得分: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();
}