2014-12-05 3 views
0

У меня есть карта Long и String - карта, которая хранит мою временную метку в качестве ключа и значения в качестве моих данных.Как получить последние 100 данных с карты?

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

Теперь я хочу, чтобы получить 100 последние данные из приведенной выше карты, глядя на временной метке, которая является частью ключа, а затем держать на добавление этих данных в Списке String. В общем случае заселяют 100 самых последних данных в списке.

Каков наилучший способ для этого? Могу ли я использовать TreeMap здесь, и он правильно сортирует мои ключи на метке времени?

В общем моей метке будет выглядеть следующим образом - 1417686422238 и это будет в миллисекундах

+3

«SortedMap» кажется действительно тем, что вы хотите, и, следовательно, «TreeMap». – fge

+0

Является ли timeStamp единственной частью ключа? – CBredlow

+0

@CBredlow Да, это единственная часть ключа – john

ответ

1

В случае вы имеете в виду под «недавним» недавно добавила, то вы можете попробовать LinkedHashMap, которая будет поддерживать порядок вставки. Затем вы можете перебирать первые 100 предметов.

Вы можете перемещаться по карте, как это:

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

Нет. Я не имел в виду, что данные могут поступать в другом порядке с разной временной меткой, поэтому мне нужно, чтобы последние данные были 100, поэтому мне нужно разобраться на моем ключе. – john

+0

TreeMap делает именно это, он хранит записи, отсортированные по ключу. – arynaq

+0

Итак, в основном вы хотите, чтобы элементы сортировались в соответствии с меткой времени, которая не совпадает с самыми последними 100 элементами. В этом случае «TreeMap», как и другие люди, соответствует вашим требованиям. – Multithreader

0

Для любого ключа, который может быть отсортирован, вы должны использовать SortedMap (если нет других требований, что делает его непригодным). A TreeMap - это отсортированная карта. Так как вам нужны последние k записей, вам нужно сначала ключей. Это можно сделать, перейдя через к первых ключей в МАП descendingKeySet следующим образом, один вкладыш в 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 карте, и любые изменения, которые будут отражены в возвращенная карта хвоста.

Смежные вопросы