簡體   English   中英

如何從地圖獲取最近的100個數據?

[英]How to get most recent 100 data from a Map?

我有一個Long and String的Map-Map,它存儲我的時間戳作為鍵,並將值存儲為數據。

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

現在,我想通過查看時間戳(這是鍵的一部分)從上述地圖中獲取100個最新數據,然后繼續將這些數據添加到字符串列表中。 通常,在列表中填充100個最新數據。

做這個的最好方式是什么? 我可以在這里使用TreeMap嗎,它會根據時間戳正確地對密鑰進行排序嗎?

總的來說,我的時間戳看起來像這樣1417686422238 ,它將以毫秒為單位

如果您的意思是最近添加的“最近”,則可以嘗試LinkedHashMap ,它將保持插入順序。 然后,您可以迭代前100個項目。

您可以像這樣遍歷地圖:

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

對於可以排序的任何鍵,都應該使用SortedMap (除非有其他要求使其不適用)。 TreeMap是一個排序的地圖。 由於您需要最近的k個條目,因此首先需要最大的密鑰。 可以通過按以下方式遍歷地圖的descendingKeySetk個第一鍵(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映射支持, eventTimestampHolder任何更改都將反映在返回的tail映射中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM