2

Map<DateTime,Integer> rawCount日付ごとの raw カウントを含む があります (a ) time-series

特定の間隔でカウントを含む集計マップを作成したいと考えています。

たとえばduration = (1000*1*60*60)start = new DateTime()このマップには、今から rawCount マップの最後の日付までの 1 時間あたりの合計カウントが含まれます。

JodaTimeは Comparable ではないため、を使用しています。Intervalマップを最新の日付から最も古い日付の順に並べたいのですが、a を使用することTreeMapはできません。

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 に答える