[英]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個條目,因此首先需要最大的密鑰。 可以通過按以下方式遍歷地圖的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
映射支持, eventTimestampHolder
任何更改都將反映在返回的tail映射中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.