example - set to array java
¿Cómo puedo convertir un Java HashSet<Integer> a una matriz int primitiva? (7)
No tienes que iterar sobre ellos Lo siento.
Tengo un HashSet<Integer>
con un montón de Integers
en él. Quiero convertirlo en una matriz, pero llamando
hashset.toArray();
devuelve un Object[]
. ¿Hay una mejor manera de convertirlo en una matriz de int
no sea iterando manualmente a través de cada elemento? Quiero pasar la matriz a
void doSomething(int[] arr)
que no acepta la matriz Object [], incluso si intento lanzarlo como
doSomething((int[]) hashSet.toArray());
Puede convertir un Set<Integer>
a Integer[]
incluso sin Apache Utils:
Set<Integer> myset = new HashSet<Integer>();
Integer[] array = myset.toArray(new Integer[0]);
Sin embargo, si necesitas int[]
tienes que iterar sobre el conjunto.
Puede crear un int[]
desde cualquier Collection<Integer>
(incluido un HashSet<Integer>
) usando flujos de Java 8:
int[] array = coll.stream().mapToInt(Number::intValue).toArray();
La biblioteca todavía está iterando sobre la colección (u otra fuente de flujo) en su nombre, por supuesto.
Además de ser conciso y no tener dependencias de bibliotecas externas, las secuencias también le permiten ir en paralelo si tiene una gran colección para copiar.
Puedes usar Guava''s
Ints.toArray(Collection<? extends Number> collection)
También puede utilizar la variante toArray (T [] contents) del método toArray (). Cree una matriz vacía de entradas del mismo tamaño que el HashSet y luego pásela al método toArray ():
Integer[] myarray = new Integer[hashset.size()];
doSomething(hashset.toArray(myarray));
Tendría que cambiar la función doSomething()
para aceptar una matriz Integer[]
lugar de int[]
. Si eso no fuera factible, habría convertido la matriz de valores devueltos por toArray
a int[]
.
ArrayUtils de Apache tiene esto (todavía se repite entre bastidores ):
doSomething(ArrayUtils.toPrimitive(hashset.toArray()));
Siempre son un buen lugar para comprobar cosas como esta.
public int[] toInt(Set<Integer> set) {
int[] a = new int[set.size()];
int i = 0;
for (Integer val : set) a[i++] = val;
return a;
}
Ahora que escribí el código para usted, ya no es ese manual, ¿verdad? ;)