我有一个SQL查询的ResultSet。每个ResultSet都包含一个Unix-Timestamp和一个double值:
double timeStamp = resultSet.getDouble(1);
double value = resultSet.getDouble(2);
我想创建(在迭代ResultSet之前或同时)几个数组,每个数组代表两个时间戳之间的范围。 resultSet的每对/双对应放入其中一个数组中。
例如,如果最低时间戳是1366816115和最高1366848754,我想创建时间为一小时(60分钟)的数组,并将每个双/双对放入其中一个数组中,前提是时间戳ResultSet匹配。
在JAVA中有什么有效的方法可以做到这一点?我尝试了几种方法,但每次我开始摆弄它并最终感到困惑。
如果有一个关键字我应该查找,我也会对此感到高兴。
提前感谢阅读和任何帮助。
编辑: pasha701答案效果很好,为了完整性,这里是我如何计算periodStart:
Double key = new Double(timeStamp - (timeStamp % granularityInSeconds));
其中timeStamp = unix timestamp(将Java时间戳除以1000)和granularityInSeconds =数组覆盖的范围,即granularityInSeconds =(60 * 60)将创建覆盖一小时的数组。
非常感谢,pasha701!
答案 0 :(得分: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;
}
}