java java-8 apache-commons

Java 8 mejorado para bucle con índice/rango



java-8 apache-commons (7)

Aunque el uso de la sublist es mejor, pero la versión de transmisión usa skip and limit :

list.stream().skip(1) .... limit(6).....

¿Es posible especificar un índice / rango en bucle mejorado para Java?

Por ejemplo, tengo una lista: List<String> list;

Y quiero ejecutar un bucle for desde el índice 1 en lugar de 0:

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

O hasta el índice 5

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

Sé que puedo usar el bucle for tradicional o mantener un contador dentro del bucle for mejorado, pero quería saber si hay algo fuera de la caja en las colecciones de Java o Apache.


El bucle for tradicional es la solución "lista para usar" para este requisito:

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

y (si la List tiene al menos 5 elementos):

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


En Java 8 tenemos Stream API, que podríamos usar para iterar sobre Lista con índices personalizados:

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

en el método de range , puede comenzar desde 1 y / o iterar hasta 5.


Es posible con list.subList(1, list.size()) , pero agregará una penalización de rendimiento para la sublistación de la lista. Es mejor usar el bucle tradicional para en este caso.

// Calcule primero el tamaño para evitar la penalización de rendimiento calculando en bucle cada iteración

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


No estoy seguro de la penalización de rendimiento, pero puede usar List::subList

List<String> list = Arrays.asList("a", "b", "c"); for (String s : list.subList(1, list.size())) { System.out.println(s); }

salida

2 3


subList en este caso:

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

y

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


Puedes usarlo

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