Estoy tratando de convertir una ArrayList que contiene objetos Integer en primitivo int [] con el siguiente fragmento de código, pero arroja un error de tiempo de compilación. ¿Es posible convertir en Java?
List<Integer> x = new ArrayList<Integer>();
int[] n = (int[])x.toArray(int[x.size()]);
java
arrays
arraylist
primitive-types
Snehal
fuente
fuente

List<Integer> x = new ArrayList<Integer>();Integer[] n = x.toArray(new Integer[0]);Respuestas:
Puede convertir, pero no creo que haya nada incorporado para hacerlo automáticamente:
(Tenga en cuenta que esto arrojará una NullPointerException si alguno
integerso cualquier elemento dentro de él esnull).EDITAR: según los comentarios, es posible que desee utilizar el iterador de lista para evitar costos desagradables con listas como
LinkedList:fuente
integers.stream().mapToInt(Integer::valueOf).toArraySi estas usando java-8 También hay otra forma de hacer esto.
Lo que hace es:
Stream<Integer>de la listaIntStreammapeo de cada elemento a sí mismo (función de identidad), desempaquetar elintvalor retenido por cadaIntegerobjeto (hecho automáticamente desde Java 5)intllamandotoArrayTambién puede llamar explícitamente a
intValuetravés de una referencia de método, es decir:También vale la pena mencionar que podría obtener un
NullPointerExceptionsi tiene algunanullreferencia en la lista. Esto podría evitarse fácilmente agregando una condición de filtrado a la tubería de flujo de esta manera:Ejemplo:
fuente
doubletipos; ¿No hay equivalente para losfloattipos?Google guayaba
Google Guava proporciona una forma ordenada de hacer esto llamando
Ints.toArray.fuente
Apache Commons tiene una clase ArrayUtils, que tiene un método toPrimitive () que hace exactamente esto.
Sin embargo, como demostró Jon, es bastante fácil hacerlo usted mismo en lugar de usar bibliotecas externas.
fuente
Creo que iterar usando el iterador de la Lista es una mejor idea, ya que
list.get(i)puede tener un bajo rendimiento dependiendo de la implementación de la Lista:fuente
usar Dollar debería ser bastante simple:
Estoy planeando mejorar el DSL para eliminar la
toArray()llamada intermediafuente
Esto funciona bien para mí :)
Encontrado en https://www.techiedelight.com/convert-list-integer-array-int/
fuente
Me desconcierta que fomentemos métodos personalizados únicos cuando una biblioteca perfectamente buena y bien utilizada como Apache Commons ya haya resuelto el problema. Aunque la solución es trivial si no es absurda, es irresponsable fomentar ese comportamiento debido al mantenimiento y la accesibilidad a largo plazo.
Solo ve con Apache Commons
fuente
Si está utilizando Eclipse Collections , puede utilizar el
collectInt()método para cambiar de un contenedor de objetos a un contenedor int primitivo.Si puede convertir su
ArrayListaFastList, puede deshacerse del adaptador.Nota: Soy un committer para las colecciones de Eclipse.
fuente
Java 8:
fuente
Arrays.setAll ()
Salida:
Lo mismo funciona para una gran variedad de
longodouble, pero no para las matrices deboolean,char,byte,shortofloat. Si tienes una lista realmente enorme, incluso hay unparallelSetAllmétodo que puedes usar en su lugar.Para mí, esto es lo suficientemente bueno y elegante como para que no quiera obtener una biblioteca externa ni usar secuencias para ella.
Enlace de documentación:
Arrays.setAll(int[], IntUnaryOperator)fuente
Simplemente puede copiarlo a una matriz:
No muy elegante; pero, oye, funciona ...
fuente
Una solución muy simple de una línea es:
fuente
Este segmento de código funciona para mí, prueba esto:
Vale la pena mencionar que ArrayList debería declararse así:
fuente
fuente
Acceso
arrcomo normalint[].fuente