Я получаю данные для определенного идентификатора пользователя из 14 таблиц, как показано ниже. В рамках данных, я извлекая user_id
, record_name
и record_value
, а затем я получаю timestamp
от record_name
(расщеплением на нем), а затем заполнить мой TreeMap с ключом как timestamp
и значением как record_value
.Как создать структуру данных, которая может содержать 100 самых последних значений record_values в timestamp?
После этого я извлекаю 100 последних record_value
от valueTimestampMap
, а затем заселяю их в моем recordValueHolder
LinkedList.
В моем случае 100 самых последних средств, глядя на метку времени не так, как они поступают.
Ниже мой код -
public List<String> getData(String userId) {
List<String> recordValueHolder = new LinkedList<String>();
Map<Long, String> valueTimestampMap = new TreeMap<Long, String>(Collections.reverseOrder());
for (int tableNumber = 0; tableNumber < 14; tableNumber++) {
String sql = "select * from table_" + tableNumber + " where user_id='" + userId + "';";
SimpleStatement query = new SimpleStatement(sql);
query.setConsistencyLevel(ConsistencyLevel.QUORUM);
ResultSet res = session.execute(query);
Iterator<Row> rows = res.iterator();
while (rows.hasNext()) {
Row r = rows.next();
String user_id = r.getString("user_id"); // get user id
String record_name = r.getString("record_name"); // get record name
String record_value = r.getString("record_value"); // get record value
long timestamp = Long.parseLong(record_name.split("\\.")[1]);
// populate my tree map
valueTimestampMap.put(timestamp, record_value);
}
}
// now extract 100 most recent record_value since
// valueTimestampMap is already sorted basis on key in
// descending order
for (Map.Entry<Long, String> entry : valueTimestampMap.entrySet()) {
if (recordValueHolder.size() > 99)
break;
recordValueHolder.add(entry.getValue());
}
return recordValueHolder;
}
Я сортировкой TreeMap в порядке ключей убывания с использованием Collections.reverseOrder()
, так что у меня есть самые последние метки времени на вершине, а затем я могу просто извлечь 100 последний record_value
из это и то, что делает мой выше код.
Постановка задачи: -
У меня есть 100 самых последних record_value
в списке recordValueHolder. Теперь мне также нужно выяснить, какие tableNumber
каждый record_value
из 100 пришло из и что было record_name
для этого record_value
?
Итак, я думал создать структуру данных, как показано ниже, которая может содержать 100 последних record_value
вместе с их номером таблицы, именем записи и временной меткой.
public class RecordValueTimestampTableHolder {
private long timestamp;
private String recordName;
private String recordValue;
private Integer tableNumber;
// setters and getters
}
Так размер List<RecordValueTimestampTableHolder>
должен быть 100. Возможно ли это сделать с моей текущей настройки? Я не могу понять, как это сделать?
Теперь мой тип возврата данных getData
метод будет меняться, и вместо того, чтобы вернуться List<String>
, теперь он вернется List<RecordValueTimestampTableHolder>
, который будет иметь 100 последних record_values наряду с другими значениями, а также.
Я немного смущен. но если «timestamp» - это то, на чем вы основываетесь, то «TreeMap» - правильный выбор. каждый раз, когда вы можете вытащить его с наименьшей меткой времени. но если ваша система работает, то «timestamp» можно интерпретировать как время, когда данные поступают, тогда достаточно простого массива длиной в 100 длин, и он быстрее, чем «TreeMap». – HuStmpHrrr