resueltos - ejemplos de while en java netbeans
¿Cómo funciona el bucle de Java ''para cada''? (26)
Considerar:
List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
System.out.println(item);
}
¿Cómo sería el equivalente for
bucle sin usar el para cada sintaxis?
Agrega belleza a tu código al eliminar todo el desorden de bucle básico. Da un aspecto limpio a su código, justificado a continuación.
Normal for
bucle:
void cancelAll(Collection<TimerTask> list) {
for (Iterator<TimerTask> i = list.iterator(); i.hasNext();)
i.next().cancel();
}
Usando para cada uno:
void cancelAll(Collection<TimerTask> list) {
for (TimerTask t : list)
t.cancel();
}
for-each es una construcción sobre una colección que implementa Iterator . Recuerda que tu colección debe implementar Iterator ; De lo contrario no puedes usarlo para cada uno.
La siguiente línea se lee como " para cada TimerTask t en la lista " .
for (TimerTask t : list)
Hay menos posibilidades de errores en el caso de para cada uno. No tiene que preocuparse por inicializar el iterador o inicializar el contador de bucles y terminarlo (donde haya margen para errores).
Antes de Java 8, necesitas usar lo siguiente:
Iterator<String> iterator = someList.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}
Sin embargo, con la introducción de Streams en Java 8 puede hacer lo mismo con mucho menos sintaxis. Por ejemplo, para tu someList
puedes hacer:
someList.stream().forEach(System.out::println);
Puedes encontrar más sobre las corrientes here .
Aquí hay una expresión equivalente.
for(Iterator<String> sit = someList.iterator(); sit.hasNext(); ) {
System.out.println(sit.next());
}
Aquí hay una respuesta que no asume el conocimiento de los iteradores de Java. Es menos preciso, pero es útil para la educación.
Mientras programamos, a menudo escribimos un código que se parece a lo siguiente:
char[] grades = ....
for(int i = 0; i < grades.length; i++) { // for i goes from 0 to grades.length
System.out.print(grades[i]); // Print grades[i]
}
La sintaxis de foreach permite escribir este patrón común de una manera más natural y menos sintácticamente ruidosa.
for(char grade : grades) { // foreach grade in grades
System.out.print(grade); // print that grade
}
Además, esta sintaxis es válida para objetos como listas o conjuntos que no admiten la indexación de matrices, pero que implementan la interfaz de Iterable de Java.
Como han dicho tantas buenas respuestas, un objeto debe implementar la Iterable interface
si quiere usar un bucle for-each
.
Publicaré un ejemplo simple e intentaré explicar de una manera diferente cómo funciona un bucle for-each
.
El ejemplo for-each
bucle:
public class ForEachTest {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("111");
list.add("222");
for (String str : list) {
System.out.println(str);
}
}
}
Luego, si usamos javap
para descompilar esta clase, obtendremos este ejemplo de código de bytes:
public static void main(java.lang.String[]);
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=4, args_size=1
0: new #16 // class java/util/ArrayList
3: dup
4: invokespecial #18 // Method java/util/ArrayList."<init>":()V
7: astore_1
8: aload_1
9: ldc #19 // String 111
11: invokeinterface #21, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
16: pop
17: aload_1
18: ldc #27 // String 222
20: invokeinterface #21, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
25: pop
26: aload_1
27: invokeinterface #29, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
Como podemos ver en la última línea de la muestra, el compilador convertirá automáticamente el uso de la palabra clave for-each
al uso de un Iterator
en el momento de la compilación. Eso puede explicar por qué el objeto, que no implementa la Iterable interface
, lanzará una Exception
cuando intente usar el bucle for-each
.
Como se define en JLS , cada bucle puede tener dos formas:
Si el tipo de expresión es un subtipo de
Iterable
, la traducción es como:List<String> someList = new ArrayList<String>(); someList.add("Apple"); someList.add("Ball"); for (String item : someList) { System.out.println(item); } // IS TRANSLATED TO: for(Iterator<String> stringIterator = someList.iterator(); stringIterator.hasNext(); ) { String item = stringIterator.next(); System.out.println(item); }
Si la expresión tiene necesariamente un tipo de matriz
T[]
entonces:String[] someArray = new String[2]; someArray[0] = "Apple"; someArray[1] = "Ball"; for(String item2 : someArray) { System.out.println(item2); } // IS TRANSLATED TO: for (int i = 0; i < someArray.length; i++) { String item2 = someArray[i]; System.out.println(item2); }
Java 8 ha introducido flujos que funcionan mejor en general. Podemos usarlos como:
someList.stream().forEach(System.out::println);
Arrays.stream(someArray).forEach(System.out::println);
El docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html , agregado en Java 5 (también llamado "mejorado para bucle"), es equivalente a usar el azúcar sintáctico java.util.Iterator
--it para la misma cosa. Por lo tanto, al leer cada elemento, uno por uno y en orden, siempre se debe elegir un foreach
sobre un iterador, ya que es más conveniente y conciso.
para cada
for(int i : intList) {
System.out.println("An element in the list: " + i);
}
Iterador
Iterator<Integer> intItr = intList.iterator();
while(intItr.hasNext()) {
System.out.println("An element in the list: " + intItr.next());
}
Hay situaciones en las que debes usar un Iterator
directamente. Por ejemplo, intentar eliminar un elemento mientras se usa un foreach
puede (¿va a?) Resultar en una ConcurrentModificationException
.
foreach
vs. for
: diferencias básicas
La única diferencia práctica entre for
y foreach
es que, en el caso de objetos indexables, no tiene acceso al índice. Un ejemplo cuando se requiere el básico for
bucle:
for(int i = 0; i < array.length; i++) {
if(i < 5) {
// Do something special
} else {
// Do other stuff
}
}
Aunque podría crear manualmente un índice separado int-variable con foreach
,
int idx = -1;
for(int i : intArray) {
idx++;
...
}
no se recomienda, ya variable-scope no es ideal, y el básico for
bucle es simplemente el formato estándar y esperado para este caso de uso.
foreach
vs. for
: Performance
Al acceder a las colecciones, un foreach
es significativamente más rápido que el básico for
el acceso a la matriz del bucle. Sin embargo, al acceder a matrices, al menos con matrices primitivas y de envoltura, el acceso a través de índices es mucho más rápido.
Programación de la diferencia entre el iterador y el acceso al índice para matrices internas primitivas
Los índices son entre un 23 y un 40 por ciento más rápidos que los iteradores al acceder a matrices int
o Integer
. Aquí está el resultado de la clase de prueba en la parte inferior de esta publicación, que suma los números en una matriz int-primitiva de 100 elementos (A es iterador, B es índice):
[C:/java_code/]java TimeIteratorVsIndexIntArray 1000000
Test A: 358,597,622 nanoseconds
Test B: 269,167,681 nanoseconds
B faster by 89,429,941 nanoseconds (24.438799231635727% faster)
[C:/java_code/]java TimeIteratorVsIndexIntArray 1000000
Test A: 377,461,823 nanoseconds
Test B: 278,694,271 nanoseconds
B faster by 98,767,552 nanoseconds (25.666236154695838% faster)
[C:/java_code/]java TimeIteratorVsIndexIntArray 1000000
Test A: 288,953,495 nanoseconds
Test B: 207,050,523 nanoseconds
B faster by 81,902,972 nanoseconds (27.844689860906513% faster)
[C:/java_code/]java TimeIteratorVsIndexIntArray 1000000
Test A: 375,373,765 nanoseconds
Test B: 283,813,875 nanoseconds
B faster by 91,559,890 nanoseconds (23.891659337194227% faster)
[C:/java_code/]java TimeIteratorVsIndexIntArray 1000000
Test A: 375,790,818 nanoseconds
Test B: 220,770,915 nanoseconds
B faster by 155,019,903 nanoseconds (40.75164734599769% faster)
[C:/java_code/]java TimeIteratorVsIndexIntArray 1000000
Test A: 326,373,762 nanoseconds
Test B: 202,555,566 nanoseconds
B faster by 123,818,196 nanoseconds (37.437545972215744% faster)
También ejecuté esto para una matriz Integer
, y los índices siguen siendo el claro ganador, pero solo entre un 18 y un 25 por ciento más rápido.
Para las colecciones, los iteradores son más rápidos que los índices.
Para una List
de Integers
, sin embargo, los iteradores son el claro ganador. Simplemente cambie la matriz int en la clase de prueba a:
List<Integer> intList = Arrays.asList(new Integer[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100});
Y realice los cambios necesarios en la función de prueba ( int[]
para List<Integer>
, length
a size()
, etc.):
[C:/java_code/]java TimeIteratorVsIndexIntegerList 1000000
Test A: 3,429,929,976 nanoseconds
Test B: 5,262,782,488 nanoseconds
A faster by 1,832,852,512 nanoseconds (34.326681820485675% faster)
[C:/java_code/]java TimeIteratorVsIndexIntegerList 1000000
Test A: 2,907,391,427 nanoseconds
Test B: 3,957,718,459 nanoseconds
A faster by 1,050,327,032 nanoseconds (26.038700083921256% faster)
[C:/java_code/]java TimeIteratorVsIndexIntegerList 1000000
Test A: 2,566,004,688 nanoseconds
Test B: 4,221,746,521 nanoseconds
A faster by 1,655,741,833 nanoseconds (38.71935684115413% faster)
[C:/java_code/]java TimeIteratorVsIndexIntegerList 1000000
Test A: 2,770,945,276 nanoseconds
Test B: 3,829,077,158 nanoseconds
A faster by 1,058,131,882 nanoseconds (27.134122749113843% faster)
[C:/java_code/]java TimeIteratorVsIndexIntegerList 1000000
Test A: 3,467,474,055 nanoseconds
Test B: 5,183,149,104 nanoseconds
A faster by 1,715,675,049 nanoseconds (32.60101667104192% faster)
[C:/java_code/]java TimeIteratorVsIndexIntList 1000000
Test A: 3,439,983,933 nanoseconds
Test B: 3,509,530,312 nanoseconds
A faster by 69,546,379 nanoseconds (1.4816434912159906% faster)
[C:/java_code/]java TimeIteratorVsIndexIntList 1000000
Test A: 3,451,101,466 nanoseconds
Test B: 5,057,979,210 nanoseconds
A faster by 1,606,877,744 nanoseconds (31.269164666060377% faster)
En una prueba son casi equivalentes, pero con las colecciones, el iterador gana.
* Esta publicación está basada en dos respuestas que escribí en :
Más información: ¿Cuál es más eficiente, un bucle para cada bucle o un iterador?
La clase de prueba completa
Después de leer esta pregunta en Desbordamiento de pila, creé esta clase de comparar el tiempo que se tarda en hacer dos cosas.
import java.text.NumberFormat;
import java.util.Locale;
/**
<P>{@code java TimeIteratorVsIndexIntArray 1000000}</P>
@see <CODE><A HREF="https://.com/questions/180158/how-do-i-time-a-methods-execution-in-java">https://.com/questions/180158/how-do-i-time-a-methods-execution-in-java</A></CODE>
**/
public class TimeIteratorVsIndexIntArray {
public static final NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
public static final void main(String[] tryCount_inParamIdx0) {
int testCount;
// Get try-count from a command-line parameter
try {
testCount = Integer.parseInt(tryCount_inParamIdx0[0]);
}
catch(ArrayIndexOutOfBoundsException | NumberFormatException x) {
throw new IllegalArgumentException("Missing or invalid command line parameter: The number of testCount for each test. " + x);
}
//Test proper...START
int[] intArray = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100};
long lStart = System.nanoTime();
for(int i = 0; i < testCount; i++) {
testIterator(intArray);
}
long lADuration = outputGetNanoDuration("A", lStart);
lStart = System.nanoTime();
for(int i = 0; i < testCount; i++) {
testFor(intArray);
}
long lBDuration = outputGetNanoDuration("B", lStart);
outputGetABTestNanoDifference(lADuration, lBDuration, "A", "B");
}
private static final void testIterator(int[] int_array) {
int total = 0;
for(int i = 0; i < int_array.length; i++) {
total += int_array[i];
}
}
private static final void testFor(int[] int_array) {
int total = 0;
for(int i : int_array) {
total += i;
}
}
//Test proper...END
//Timer testing utilities...START
public static final long outputGetNanoDuration(String s_testName, long l_nanoStart) {
long lDuration = System.nanoTime() - l_nanoStart;
System.out.println("Test " + s_testName + ": " + nf.format(lDuration) + " nanoseconds");
return lDuration;
}
public static final long outputGetABTestNanoDifference(long l_aDuration, long l_bDuration, String s_aTestName, String s_bTestName) {
long lDiff = -1;
double dPct = -1.0;
String sFaster = null;
if(l_aDuration > l_bDuration) {
lDiff = l_aDuration - l_bDuration;
dPct = 100.00 - (l_bDuration * 100.0 / l_aDuration + 0.5);
sFaster = "B";
}
else {
lDiff = l_bDuration - l_aDuration;
dPct = 100.00 - (l_aDuration * 100.0 / l_bDuration + 0.5);
sFaster = "A";
}
System.out.println(sFaster + " faster by " + nf.format(lDiff) + " nanoseconds (" + dPct + "% faster)");
return lDiff;
}
//Timer testing utilities...END
}
El Java para cada bucle (también conocido como mejorado para bucle) es una versión simplificada de un bucle for. La ventaja es que hay menos código para escribir y menos variables para administrar. El inconveniente es que no tiene control sobre el valor del paso ni acceso al índice de bucle dentro del cuerpo del bucle.
Se utilizan mejor cuando el valor del paso es un incremento simple de 1 y cuando solo necesita acceder al elemento de bucle actual. Por ejemplo, si necesita recorrer cada elemento de una matriz o colección sin mirar hacia delante o detrás del elemento actual.
No hay inicialización de bucle, ninguna condición booleana y el valor del paso es implícito y es un incremento simple. Es por eso que se consideran mucho más simples que los regulares para los bucles.
Mejorado para loops sigue este orden de ejecución:
1) cuerpo de bucle
2) repita desde el paso 1 hasta que se haya recorrido toda la matriz o colección
Ejemplo: matriz de enteros
int [] intArray = {1, 3, 5, 7, 9};
for(int currentValue : intArray) {
System.out.println(currentValue);
}
La variable currentValue mantiene el valor actual que se está repartiendo en la matriz intArray. Note que no hay un valor de paso explícito, siempre es un incremento de 1.
Se puede pensar que el colon significa "en". Por lo tanto, los estados de declaración de bucle mejorados: bucle sobre intArray y almacenan el valor int de la matriz actual en la variable currentValue.
Salida:
1
3
5
7
9
Ejemplo - String Array
Podemos usar el bucle for-each para iterar sobre una serie de cadenas. Los estados de declaración de bucle: bucle sobre myStrings String array y almacenan el valor actual de String en la variable currentString.
String [] myStrings = {
"alpha",
"beta",
"gamma",
"delta"
};
for(String currentString : myStrings) {
System.out.println(currentString);
}
Salida:
alpha
beta
gamma
delta
Ejemplo - Lista
El bucle for mejorado también se puede usar para iterar sobre un java.util.List de la siguiente manera:
List<String> myList = new ArrayList<String>();
myList.add("alpha");
myList.add("beta");
myList.add("gamma");
myList.add("delta");
for(String currentItem : myList) {
System.out.println(currentItem);
}
Los estados de declaración de bucle: bucle sobre myList Lista de cadenas y almacenan el valor actual de la lista en la variable currentItem.
Salida:
alpha
beta
gamma
delta
Ejemplo - Set
El bucle for mejorado también se puede usar para iterar sobre un java.util.Set de la siguiente manera:
Set<String> mySet = new HashSet<String>();
mySet.add("alpha");
mySet.add("alpha");
mySet.add("beta");
mySet.add("gamma");
mySet.add("gamma");
mySet.add("delta");
for(String currentItem : mySet) {
System.out.println(currentItem);
}
Los estados de declaración de bucle: bucle sobre mySet Set of Strings y almacenan el valor Set actual en la variable currentItem. Tenga en cuenta que, dado que se trata de un conjunto, los valores de cadena duplicados no se almacenan.
Salida:
alpha
delta
beta
gamma
Fuente: Loops in Java - Ultimate Guide
El bucle for-each en Java utiliza el mecanismo de iterador subyacente. Así que es idéntico a lo siguiente:
Iterator<String> iterator = someList.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}
El concepto de un bucle foreach como se menciona en Wikipedia se destaca a continuación:
Sin embargo, a diferencia de otras construcciones de bucles for, los bucles foreach generalmente no tienen un contador explícito : esencialmente dicen "haz esto a todo en este conjunto", en lugar de "haz esto x veces". Esto evita posibles errores off-by-one y simplifica la lectura del código.
Por lo tanto, el concepto de un bucle foreach describe que el bucle no usa ningún contador explícito, lo que significa que no hay necesidad de usar índices para atravesar la lista, por lo que evita que el usuario cometa un error. Para describir el concepto general de este error off-by-one, tomemos un ejemplo de un bucle para recorrer en una lista usando índices.
// In this loop it is assumed that the list starts with index 0
for(int i=0; i<list.length; i++){
}
Pero supongamos que si la lista comienza con el índice 1, entonces este bucle generará una excepción, ya que no encontrará ningún elemento en el índice 0 y este error se denomina error de uno en uno. Por lo tanto, para evitar este error, se utiliza el concepto de un bucle foreach. También puede haber otras ventajas, pero creo que este es el concepto principal y la ventaja de usar un bucle foreach.
El constructo para cada uno también es válido para matrices. p.ej
String[] fruits = new String[] { "Orange", "Apple", "Pear", "Strawberry" };
for (String fruit : fruits) {
// fruit is an element of the `fruits` array.
}
que es esencialmente equivalente de
for (int i = 0; i < fruits.length; i++) {
String fruit = fruits[i];
// fruit is an element of the `fruits` array.
}
Entonces, resumen general:
[nsayer] La siguiente es la forma más larga de lo que está sucediendo:
for(Iterator<String> i = someList.iterator(); i.hasNext(); ) { String item = i.next(); System.out.println(item); }
Tenga en cuenta que si necesita usar i.remove (); en su bucle, o acceda al iterador real de alguna manera, no puede usar el idioma for (:), ya que el iterador real simplemente se infiere.
Está implícito en la respuesta de nsayer, pero vale la pena señalar que la sintaxis de OP para (..) funcionará cuando "someList" sea algo que implemente java.lang.Iterable - no tiene que ser una lista, o alguna colección de java.util. Incluso sus propios tipos, por lo tanto, pueden usarse con esta sintaxis.
El lenguaje Java para cada idioma solo se puede aplicar a matrices u objetos de tipo * Iterable . Este idioma está implícito, ya que está realmente respaldado por un iterador. El iterador está programado por el programador y, a menudo, utiliza un índice entero o un nodo (según la estructura de datos) para realizar un seguimiento de su posición. En el papel, es más lento que un bucle for regular, al menos para estructuras "lineales" como matrices y listas, pero proporciona una mayor abstracción.
En Java 8, introdujeron forEach. Usándolo en la lista, los mapas se pueden enlazar.
Bucle una lista utilizando para cada
List<String> someList = new ArrayList<String>();
someList.add("A");
someList.add("B");
someList.add("C");
someList.forEach(listItem -> System.out.println(listItem))
o
someList.forEach(listItem-> {
System.out.println(listItem);
});
Bucle un mapa utilizando para cada
Map<String, String> mapList = new HashMap<>();
mapList.put("Key1", "Value1");
mapList.put("Key2", "Value2");
mapList.put("Key3", "Value3");
mapList.forEach((key,value)->System.out.println("Key: " + key + " Value : " + value));
o
mapList.forEach((key,value)->{
System.out.println("Key : " + key + " Value : " + value);
});
En las características de Java 8 puedes usar esto:
List<String> messages = Arrays.asList("First", "Second", "Third");
void forTest(){
messages.forEach(System.out::println);
}
Salida
First
Second
Third
Está implícito en la respuesta de nsayer, pero vale la pena señalar que la sintaxis de OP para (..) funcionará cuando "someList" sea algo que implemente java.lang.Iterable - no tiene que ser una lista, o alguna colección de java.util. Incluso sus propios tipos, por lo tanto, pueden usarse con esta sintaxis.
Esto parece una locura pero oye funciona
List<String> someList = new ArrayList<>(); //has content
someList.forEach(System.out::println);
Esto funciona. mágico
La construcción de bucle "para-cada" de Java permitirá la iteración sobre dos tipos de objetos:
-
T[]
(matrices de cualquier tipo) -
java.lang.Iterable<T>
La interfaz Iterable<T>
tiene un solo método: Iterator<T> iterator()
. Esto funciona en objetos de tipo Collection<T>
porque la interfaz Collection<T>
extiende Iterable<T>
.
Se vería algo como esto. Muy crufty
for (Iterator<String> i = someList.iterator(); i.hasNext(); )
System.out.println(i.next());
Hay una buena reseña sobre cada uno en la documentación de Sun.
También tenga en cuenta que el uso del método "foreach" en la pregunta original tiene algunas limitaciones, como el hecho de no poder eliminar elementos de la lista durante la iteración.
El nuevo for-loop es más fácil de leer y elimina la necesidad de un iterador separado, pero solo es realmente utilizable en pases de iteración de solo lectura.
Una alternativa a forEach para evitar su "para cada uno":
List<String> someList = new ArrayList<String>();
Variante 1 (plano):
someList.stream().forEach(listItem -> {
System.out.println(listItem);
});
Variante 2 (ejecución paralela (más rápida)):
someList.parallelStream().forEach(listItem -> {
System.out.println(listItem);
});
Una sintaxis de bucle foreach es:
for (type obj:array) {...}
Ejemplo:
String[] s = {"Java", "Coffe", "Is", "Cool"};
for (String str:s /*s is the array*/) {
System.out.println(str);
}
Salida:
Java
Coffe
Is
Cool
ADVERTENCIA: puede acceder a los elementos de la matriz con el bucle foreach, pero NO puede inicializarlos. Utilice el original for
bucle para eso.
ADVERTENCIA: Debe hacer coincidir el tipo de la matriz con el otro objeto.
for (double b:s) // Invalid-double is not String
Si desea editar elementos, use el bucle original for
así:
for (int i = 0; i < s.length-1 /*-1 because of the 0 index */; i++) {
if (i==1) //1 because once again I say the 0 index
s[i]="2 is cool";
else
s[i] = "hello";
}
Ahora si volcamos s a la consola, obtenemos:
hello
2 is cool
hello
hello
Usando versiones anteriores de Java, incluyendo Java 7
, puede usar el bucle foreach
siguiente manera.
List<String> items = new ArrayList<>();
items.add("A");
items.add("B");
items.add("C");
items.add("D");
items.add("E");
for(String item : items){
System.out.println(item);
}
La siguiente es la forma más reciente de usar el bucle foreach
en Java 8
(bucle una lista con la expresión forEach
+ lambda o la referencia del método)
//lambda
//Output : A,B,C,D,E
items.forEach(item->System.out.println(item));
//method reference
//Output : A,B,C,D,E
items.forEach(System.out::println);
Para más información consultar este enlace.
List<Item> Items = obj.getItems();
for(Item item:Items)
{
System.out.println(item);
}
Iteriza sobre todos los objetos en la tabla Artículos.
for (Iterator<String> i = someIterable.iterator(); i.hasNext();) {
String item = i.next();
System.out.println(item);
}
Tenga en cuenta que si necesita usar i.remove();
en su bucle, o acceda al iterador real de alguna manera, no puede usar el idioma for ( : )
:), ya que el iterador real es simplemente inferido.
Como señaló Denis Bueno, este código funciona para cualquier objeto que implemente la interfaz de Iterable
.
Además, si el lado derecho del idioma for (:)
es una array
lugar de un objeto que se puede Iterable
, el código interno usa un contador de índice int y lo array.length
con array.length
en array.length
lugar. Ver la especificación del lenguaje Java .
for (Iterator<String> itr = someList.iterator(); itr.hasNext(); ) {
String item = itr.next();
System.out.println(item);
}
public static Boolean Add_Tag(int totalsize)
{ List<String> fullst = new ArrayList<String>();
for(int k=0;k<totalsize;k++)
{
fullst.addAll();
}
}