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);
}