Получить последние 3 значения TreeMap - PullRequest
1 голос
/ 03 августа 2011

У меня есть Date / String TreeMap, и я хочу просмотреть N последних записей.

TreeMap<Date,String> map = new TreeMap<Date,String>();
map.put(new Date(2011,1,1), "32,1");
map.put(new Date(2011,3,1), "35");
map.put(new Date(2011,4,5), "38,9");
map.put(new Date(2011,8,2), "57!!");

Тогда я потерялся. Я нашел это:

NavigableSet<Date> dates = donnees.descendingKeySet();

Тогда я не знаю, как сказать что-то вроде:

for(key in dates and i ; i from 0 to N)
{ do something }

Любая помощь?

Ответы [ 6 ]

4 голосов
/ 03 августа 2011

Похоже, вы хотите повторить, хотя descendingMap():

private static final int N = 3;
...
int i = 0;
for (Map.Entry entry : map.descendingMap().entrySet()) {
    if (i++ < N) {
        System.out.println(entry);
    }
}

Консоль

Fri Sep 02 11:39:05 EDT 2011=57!!
Thu May 05 11:39:05 EDT 2011=38,9
Fri Apr 01 11:39:05 EDT 2011=35

Приложение: Вот пример использования Calendar в локали по умолчанию:

private static Date createDate(int year, int month, int day) {
    Calendar calendar = Calendar.getInstance();
    calendar.set(year, month, day);
    return calendar.getTime();
}
...
map.put(createDate(2011, 5, 3), "3-Jun-2011");
1 голос
/ 03 августа 2011

Вам небезразлично состояние дерева?Если нет, то вы можете сделать pollLastEntry () .Это удалит последнюю запись с дерева и даст ее вам.Сделайте 3 раза, и все готово.Или вы можете сгладить дерево в arrayList и просто вернуть последние 3 элемента.

1 голос
/ 03 августа 2011
int i=0;
for(Iterator<Date> it = dates.iterator(); it.hasNext() && i<3;) {
  Date date = it.next();
  doSomething();
  i++
}

Или (эквивалент):

int i=0;
Iterator<Date> it = dates.iterator();
while(i<3 && it.hasNext()) {
  Date date = it.next();
  doSomething();
  i++
}
0 голосов
/ 04 августа 2011
  • TreeMap реализует NavigableMap.
  • NavigableMap.descendingMap ().
  • нисходящий Map.entrySet (). Iterator () // первые 3 записи, которые, конечно, «последние 3», потому что это спереди.

Вы можете просто реализовать Comparator и передать его в TreeMap, чтобы «самые старые» даты были во главе TreeMap.

0 голосов
/ 03 августа 2011

Похоже, вам просто нужно перебрать элементы для первых трех:

    int i=0;
    for(Date date: dates){

        //Do something

        if(i++ > 2){
            break;
        }
    }
0 голосов
/ 03 августа 2011

TreeMap to Array и чтение массива с циклом for с условием i <3 </p>

...