Iterar sobre un conjunto en Java
Esta publicación discutirá varios métodos para iterar sobre el conjunto en Java.
1. Usando Iterator
Nosotros podemos usar iterator()
que devuelve un iterador para iterar sobre un conjunto, como se muestra a continuación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.util.Arrays; import java.util.HashSet; import java.util.Iterator; import java.util.Set; class Main { // Iterar sobre un conjunto en Java public static void main(String[] args) { Set<String> set = new HashSet<>(Arrays.asList("C++", "Java", "Go")); // 1. Devuelve un iterador sobre los elementos de este conjunto Iterator<String> it = set.iterator(); while (it.hasNext()) { System.out.println(it.next()); } // 2. Usar `forEachRemaining()` proporcionado por la interfaz `java.util.Iterator` set.iterator().forEachRemaining(System.out::println); } } |
Tenga en cuenta que el iterador lanzará un ConcurrentModificationException
si el conjunto se modifica después de su creación, excepto a través del propio método de eliminación del iterador.
2. Usar bucle for mejorado
Como Set
implementa el Iterable
interfaz, podemos usar for-loop mejorado para recorrer el conjunto, como se muestra a continuación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import java.util.Arrays; import java.util.HashSet; import java.util.Set; class Main { // Iterar sobre un conjunto en Java public static void main(String[] args) { Set<String> set = new HashSet<>(Arrays.asList("C++", "Java", "Go")); // mejorado for-loop también usa un iterador detrás de escena for (String item: set) { System.out.println(item); } } } |
3. Java 8: conversión de conjunto a flujo
En Java 8 y superior, podemos recorrer un conjunto con la ayuda de streams, lambdas y forEach, como se muestra a continuación:
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 |
import java.util.Arrays; import java.util.HashSet; import java.util.Set; import java.util.stream.Stream; class Main { // Iterar sobre un conjunto en Java public static void main(String[] args) { Set<String> set = new HashSet<>(Arrays.asList("C++", "Java", "Go")); // 1. Obtenga el flujo y use la expresión lambda set.stream().forEach(S -> System.out.println(S)); // 2. O proporcionando referencia de método set.stream().forEach(System.out::println); // 3. Establecer heredar `forEach()` de la interfaz `java.lang.Iterable` set.forEach(System.out::println); // 4. Stream.of() + toArray() Stream.of(set.toArray()).forEach(System.out::println); } } |
4. Conversión de conjunto a array
Primero podemos convertir el conjunto en una array usando toArray()
y luego imprímalo usando Arrays.toString()
método. Hay muchas implementaciones de toArray()
método, como se muestra a continuación:
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 |
import com.google.common.collect.FluentIterable; import com.google.common.collect.Iterables; import java.util.Arrays; import java.util.HashSet; import java.util.Set; class Main { // Iterar sobre un conjunto en Java public static void main(String[] args) { Set<String> set = new HashSet<>(Arrays.asList("C++", "Java", "Go")); // Convertir una lista en una array String[] array = null; // 1. Usando el método `Set.toArray(T[])` array = set.toArray(new String[set.size()]); System.out.println(Arrays.toString(array)); // 2. `Set.toArray(T[])` – sin asignar ninguna memoria array = set.toArray(new String[0]); System.out.println(Arrays.toString(array)); // 3. Usando el método `Set.toArray()` System.out.println(Arrays.toString(set.toArray())); // 4. Java 8 – Flujos + referencias de métodos array = set.stream().toArray(String[]::new); System.out.println(Arrays.toString(array)); // 5. Java 8 – Flujos + expresiones lambda array = set.stream().toArray(n -> new String[n]); System.out.println(Arrays.toString(array)); // 6. Usando la clase `FluentIterable` de la biblioteca Guava array = FluentIterable.from(set).toArray(String.class); System.out.println(Arrays.toString(array)); // 7. Usando la clase `Iterables` de la biblioteca Guava array = Iterables.toArray(set, String.class); System.out.println(Arrays.toString(array)); } } |
5. Convertir conjunto a vector
los Enumeration interfaz proporciona métodos para enumerar a través de los elementos de un Vector
. Entonces, podemos convertir el conjunto en un vector y finalmente imprimir todos los elementos de ese vector.
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 |
import java.util.*; class Main { // Iterar sobre un conjunto en Java public static void main(String[] args) { Set<String> set = new HashSet<>(Arrays.asList("C++", "Java", "Go")); // 1. Convertir el conjunto en un vector @Deprecated Enumeration<String> enumeration = new Vector(set).elements(); // si la enumeración contiene más elementos while (enumeration.hasMoreElements()) { // imprime el siguiente elemento de la enumeración System.out.println(enumeration.nextElement()); } // 2. Collections.enumeration() devuelve una enumeración sobre el // colección especificada enumeration = Collections.enumeration(set); while (enumeration.hasMoreElements()) { System.out.println(enumeration.nextElement()); } } } |
6. Convertir conjunto a string
Si solo estamos obligados a mostrar el contenido del conjunto, simplemente podemos imprimir la representación de string del conjunto usando el toString()
método, como se muestra a continuación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.util.Arrays; import java.util.HashSet; import java.util.Set; import java.util.stream.Stream; class Main { // Iterar sobre un conjunto en Java public static void main(String[] args) { Set<String> set = new HashSet<>(Arrays.asList("C++", "Java", "Go")); // 1. Imprime la representación de cadena del conjunto usando `toString()` System.out.println(set.toString()); // 2. ¡Java 8! Stream.of(set.toString()).forEach(System.out::println); } } |
Se trata de iterar sobre un Conjunto en Java.
Artículos Relacionados: