remove example array java arrays int hashset

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