Итерация древовидной карты для фиксированного числа раз - PullRequest
2 голосов
/ 06 января 2011

Если у меня есть древовидная карта, которая содержит строку и двойное число. Есть ли способ получить первые 10 ключей с карты?

Ответы [ 5 ]

4 голосов
/ 06 января 2011

Получите итератор с помощью treeMap.entrySet().iterator(), если вам нужны пары ключ / значение, или treeMap.keySet().iterator(), если вы просто заботитесь о ключах, затем наберите iterator.next() 10 раз или столько, сколько iterator.hasNext() вернет true.

List<Map.Entry<String, Double>> firstTen = new ArrayList<Map.Entry<String, Double>>(10);
Iterator<String, Double> iterator = treeMap.entrySet().iterator();
for (int i = 0; iterator.hasNext() && i < 10; i++) {
    firstTen.add(iterator.next());
}
1 голос
/ 06 января 2011

Поскольку TreeMap - это NavigableMap, вам следует взглянуть на методы в этом интерфейсе. Там нет ничего, что позволяет вам выбрать первый n, но вы можете выбрать все записи с ключом меньше, чем данный ключ и т. Д.

В противном случае, я бы просто использовал Iterator и остановился бы после n итераций.

1 голос
/ 06 января 2011

Не в JDK, но есть методы в сторонних библиотеках, которые делают это.

Например <a href="http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html#limit%28java.lang.Iterable,%20int%29" rel="nofollow">Iterables.limit</a> из гуава

0 голосов
/ 06 января 2011

Работает с фрагментами кода, предоставленными dkarp и sean. Тем не менее, это сработало и с предложением DJClayworth. Вот как я это решил:

    c=sorted_map.keySet();

    Iterator itr=c.iterator();
    String s="";
    while (i<iteratesize&&itr.hasNext()){
        s=(String) itr.next();
        System.out.println(s);
        s="";
        i++;
    }

Большое спасибо всем за помощь. Я действительно ценю это.

0 голосов
/ 06 января 2011

Оберните entrySet() в Список и создайте subList():

SortedMap<String,Double> treeMap = new TreeMap<String, Double>();
List<Entry<String, Double>> firstTen = 
    new ArrayList<Map.Entry<String,Double>>(treeMap.entrySet())
    .subList(0, 10);
for(Entry<String, Double> entry : firstTen){
    // do something with entries
}

Недостаток: вся карта будет скопирована в список.

...