0

我有一个来自 SQL 查询的 ResultSet。每个 ResultSet 包含一个 Unix-Timestamp 和一个 double 值:

double timeStamp = resultSet.getDouble(1);
double value     = resultSet.getDouble(2);

我想创建(在遍历 ResultSet 之前或期间)几个数组,每个数组代表两个时间时间戳之间的范围。结果集的每个双精度/双精度对都应放入其中一个数组中。

例如,如果最低时间戳为 1366816115,最高时间戳为 1366848754,我想创建时间范围为一小时(60 分钟)的数组,并将每个双精度/双精度对放入其中一个数组中,前提是 ResultSet 的时间戳火柴。

在 Java 中执行此操作的有效方法是什么?我尝试了几种方法,但每次我开始摆弄它并最终感到困惑。

如果有某个关键字我应该查找,我也会对此感到高兴。

提前感谢您的阅读和任何帮助。

编辑:pasha701 答案效果很好,为了完整起见,这是我计算 periodStart 的方法:

Double key = new Double(timeStamp - (timeStamp % granularityInSeconds));

其中timeStamp = unix 时间戳(Java 时间戳除以1000)和particleityInSeconds = 数组应覆盖的范围,即particleityInSeconds = (60*60) 将创建覆盖一小时的数组。

非常感谢,pasha701!

4

1 回答 1

1
public void execute ()  {
    Map<Double, List<Pair>> arrayMap = new HashMap<Double, List<Pair>>();
    while (resultSet.next()) {
        double timeStamp = resultSet.getDouble(1);
        double value = resultSet.getDouble(2);

        Double key = getPeriondStart(timeStamp);
        List<Pair> list = arrayMap.get(key);
        if (list == null) {
            list = new ArrayList<Pair>();
            arrayMap.put(key, list);
        }
        list.add(new Pair(timeStamp, value));
    }

    // arrayMap contains arrays separated by periods
}

// shrink parameter to Unix-Timestamp period (hour) begining
Double getPeriondStart(double timeStamp) {
    return ...;
}

class Pair {
    double timeStamp;
    double value;

    public Pair(double timeStamp, double value) {
        this.timeStamp = timeStamp;
        this.value = value;
    }
}
于 2013-11-12T15:49:53.307 回答