Java 8 улучшена для цикла с индексом/диапазоном




java-8 apache-commons (5)

В Java 8 у нас есть Stream API, который мы могли бы использовать для перебора List с пользовательскими индексами:

List<String> evenIndexes = IntStream
  .range(0, names.length)
  .filter(i -> i % 2 == 0)
  .mapToObj(i -> names[i])
  .collect(Collectors.toList());

в методе range вы можете начать с 1 и / или повторить до 5.

Можно ли указать индекс / диапазон в расширенном цикле for в Java?

Например, у меня есть список: List<String> list;

И я хочу запустить цикл for из индекса 1 вместо 0:

for(String s : list(start from index 1))

ИЛИ до индекса 5

for(String s : list(end at index 5))

Я знаю, что могу использовать традиционный цикл for или держать счетчик внутри расширенного цикла for, но я хотел знать, есть ли что-то нестандартное в коллекциях Java или apache?


Традиционный цикл for является готовым решением для этого требования:

for (int i = 1; i < list.size(); i++) {
    String s = list.get(i);
    ...
}

и (если List содержит не менее 5 элементов):

for (int i = 0; i < 5; i++) {
    String s = list.get(i);
    ...
}

Это возможно с list.subList(1, list.size()) , но это добавит снижение производительности для списка под списком. В этом случае лучше использовать традиционный цикл for.

// Сначала вычисляем размер, чтобы избежать потери производительности при цикле на каждой итерации

int size = list.size();

for (int i = 1; i < size; i++) {
    String s = list.get(i);
    ...
}

Я бы использовал subList в этом случае:

for(String s : list.subList(1, list.size()))

а также

for(String s : list.subList(0, 6))

Вы можете использовать это

for(int i=1 ; i< list.size ; i++){
   String str = list.get(i);
}




apache-commons