Для каждой конверсии для цикла

Могу ли я узнать, как мне преобразовать следующее для каждого цикла в нормальный цикл?

for (SortedMap.Entry<Integer, String> entry : mapDefect.entrySet())

У меня есть переменная count в качестве начальной точки и конца карты в качестве конечной точки. Итак, как я могу преобразовать его в нормальный цикл?

Ответ 1

Вы говорите, что задача состоит в том, чтобы пропустить первые элементы count и обработать остальные.

Это можно сделать либо с циклом "за", либо по "каждому" циклу. В этом случае я бы сохранил это как цикл "для каждого":

int i = 0;
for (SortedMap.Entry<Integer, String> entry : mapDefect.entrySet()) {
   if (i++ < count) continue;
   ...
}

Ответ 2

Раздел 14.14.2 JLS дает перевод. В этом случае это будет примерно:

for (Iterator<SortedMap.Entry<Integer, String>> iterator
         = mapDefect.entrySet().iterator();
     iterator.hasNext(); )
{
    SortedMap.Entry<Integer, String> entry = iterator.next();
    // ...
}

В качестве альтернативы используйте Guava Iterables класс, чтобы взять раздел отсортированного набора:

Iterable<SortedMap.Entry<Integer, String>> section = Iterables.limit(
    Iterables.skip(mapDefect.entrySet(), start), end - start);
for (SortedMap.Entry<Integer, String> entry : section) {
    // ...
}

Или, если это просто из count (с пояснительным комментарием):

for (SortedMap.Entry<Integer, String> entry :
         Iterables.skip(mapDefect.entrySet(), count)) {
    // ...
}

Ответ 3

Рекомендуемый способ итерации карты - использовать итератор или цикл for-each (который использует итератор).

Преобразование для каждого цикла в "обычный" цикл может работать в вашем случае, потому что вы используете целые числа в качестве ключей карты:

for (int i = 0; i < mapDefect.size(); i++) {
  String value = mapDefect.get(i)
  // do something with value
}

Но обратите внимание, что это работает только в том случае, если вы используете ключи карты, так как вы будете использовать индексы массива/списка (что делает карту бесполезной). Чтобы использовать этот тип цикла, вы должны использовать последовательные положительные целые числа в качестве ключей карты, начиная с 0