gpt4 book ai didi

java - 如何制作一个可以根据时间戳保存 100 个最近的 record_values 的数据结构?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:24:47 26 4
gpt4 key购买 nike

我正在从 14 个表中获取特定用户 ID 的数据,如下所示。作为数据的一部分,我正在提取 user_id , record_namerecord_value然后我得到 timestamp来自 record_name (通过拆分)然后用键填充我的 TreeMap 作为 timestamp值为 record_value .

之后我提取了 100 个最近的 record_value来自 valueTimestampMap然后将其填充到我的 recordValueHolder 中链表。

在我的例子中,最近的 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;
}

我正在使用 Collections.reverseOrder() 按键的降序对 TreeMap 进行排序这样我在顶部有最近的时间戳,然后我可以简单地提取 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 以及其他值。

最佳答案

而不是使用 TreeMap<Long, String> , 使用 TreeMap<Long, RecordValueTimestampTableHolder>

而不是使用

        valueTimestampMap.put(timestamp, record_value);

使用:

        valueTimestampMap.put(timestamp, new RecordValueTimestampTableHolder(timestamp, record_name, record_value, tableNumber));

当然,这意味着您必须向 RecordValueTimestampTableHolder 添加构造函数接受四个参数并将它们分配给内部字段。

如你所说recordValueHolder必须定义为 List<RecordValueTimestampTableHolder>并且这也必须是此方法的返回类型。

填充它会和你现在填充的完全一样。虽然我个人会使用 valueTimestampMap.values()进行迭代。

int i = 0;
for (RecordValueTimestampTableHolder item : valueTimestampMap.values()) {
recordValueHolder.add(item);
if (++i == 100)
break;
}

关于java - 如何制作一个可以根据时间戳保存 100 个最近的 record_values 的数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27367207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com