如何从地图中获取最新的100个数据?

时间:2014-12-05 23:53:40

标签: java list sorting map

我有一个Long of String和Map - Map,它将我的时间戳作为键和值存储为我的数据。

Map<Long, String> eventTimestampHolder = new HashMap<Long, String>();

现在,我希望通过查看作为密钥一部分的时间戳,然后继续在字符串列表中添加这些数据,从上面的地图中获取100个最新数据。通常填充列表中的100个最新数据。

最好的方法是什么?我可以在这里使用TreeMap,它会在时间戳上正确地对我的键进行排序吗?

一般来说,我的时间戳看起来像这样 - 1417686422238并且它将以毫秒为单位

2 个答案:

答案 0 :(得分:1)

如果您的意思是最近添加的“最近”,那么您可以尝试LinkedHashMap来保持插入顺序。然后你可以迭代前100个项目。

您可以像这样迭代地图:

for(Long key : eventTimestampHolder.keySet()) {
    String value = eventTimestampHolder.get(key);
}

答案 1 :(得分:0)

对于任何可以排序的密钥,您应该使用SortedMap(除非有其他要求使其不合适)。 TreeMap是有序地图。由于您需要最新的 k 条目,因此首先需要最大键。这可以通过遍历地图descendingKeySet中的 k 第一个键来完成,如下所示,Java-8中的单行:

eventTimestampHolder.descendingKeySet().stream().limit(k); // in your case, k = 100

如果您不仅需要键,还需要值,那么您可以找到 k '键,然后使用

// the 2nd arg is a boolean indicating whether the k'th entry will be included or not
eventTimestampHolder.tailMap(kthTimestamp, true);

使用tailMap时要记住的一件事是它将由原始eventTimestampHolder地图支持,对此的任何更改都将反映在返回的尾部地图中。