Java итерирует карту по определенному индексу - PullRequest
3 голосов
/ 28 сентября 2011

У меня есть карта, созданная из строки json, которая отсортирована в порядке, в котором мне нужно разобраться.

Если есть ключ с индексом 6 (7-й ключ), я хочу иметь возможность выполнять итерациюот этого ключа до конца карты и выполнить необходимую обработку с этими парами ключ / значение.

Есть ли еще способ сделать это?

Ответы [ 3 ]

9 голосов
/ 28 сентября 2011

A Map обычно не поддерживает порядок ключей.Вам нужно будет использовать

  • A NavigableMap, например TreeMap.Предпочтительно, если ваши ключи имеют естественный порядок.
  • A LinkedHashMap, который представляет собой реализацию карты, которая сохраняет порядок вставки.

Пример фрагмента (LinkedHashMap):

Map<Integer, String> map = new LinkedHashMap<Integer, String>();

map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
map.put(4, "four");
map.put(5, "five");
map.put(6, "six");
map.put(7, "seven");
map.put(8, "eight");
map.put(9, "nine");

int index = 0;
for (Integer key : map.keySet()) {
    if (index++ < 6)
        continue;

    System.out.println(map.get(key));
}

// Prints:
//     seven
//     eight
//     nine

Пример фрагмента (TreeMap):

TreeMap<Integer, String> map = new TreeMap<Integer, String>();

map.put(5, "five");
map.put(6, "six");
map.put(7, "seven");
map.put(8, "eight");
map.put(9, "nine");

for (Integer key : map.tailMap(6).keySet())
    System.out.println(map.get(key));

// Prints
//     six
//     seven
//     eight
//     nine
0 голосов
/ 28 сентября 2011

В зависимости от реализации базовой карты, порядок уже был потерян, когда он был проанализирован.

LinkedHashMap - это зверь, за которым вы охотитесь. Связанная часть дает вам предсказуемый порядок итераций.

0 голосов
/ 28 сентября 2011
The Map interface doesn't allow direct access by index. The best you can do is something like:

Map m;
....
int count 0;
for(object el : m){ 
    if(count++ < 6) continue;
    //do your stuff here
}

Предполагается, что ваша реализация Map отсортирована, иначе при перечислении не будет гарантированного порядка.

...