Для каждой конверсии для цикла
Могу ли я узнать, как мне преобразовать следующее для каждого цикла в нормальный цикл?
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