Si tiene una matriz de objetos Java que tienen un tipo primitivo (por ejemplo, Byte, Integer, Char, etc.). ¿Hay alguna forma ordenada de convertirlo en una matriz del tipo primitivo? En particular, esto se puede hacer sin tener que crear una nueva matriz y recorrer el contenido.
Entonces, por ejemplo, dado
Integer[] array
¿Cuál es la mejor forma de convertir esto en
int[] intArray
Desafortunadamente, esto es algo que tenemos que hacer con bastante frecuencia cuando interactuamos entre Hibernate y algunas bibliotecas de terceros sobre las que no tenemos control. Parece que esta sería una operación bastante común, por lo que me sorprendería que no hubiera atajos.
¡Gracias por tu ayuda!
fuente
Una vez más, Apache Commons Lang es tu amigo. Proporcionan ArrayUtils.toPrimitive () que hace exactamente lo que necesita. Puede especificar cómo desea manejar los nulos.
fuente
Con las transmisiones introducidas en Java 8, esto se puede hacer:
int[] intArray = Arrays.stream(array).mapToInt(Integer::intValue).toArray();
Sin embargo, en la actualidad hay corrientes única primitivas para
int
,long
ydouble
. Si necesita convertir a otro tipo primitivo, comobyte
el camino más corto sin una biblioteca externa, es este:byte[] byteArray = new byte[array.length]; for(int i = 0; i < array.length; i++) byteArray[i] = array[i];
O el bucle for se puede reemplazar con una secuencia si lo desea:
IntStream.range(0, array.length).forEach(i -> byteArray[i] = array[i]);
Todos estos arrojarán un
NullPointerException
si alguno de sus elementos lo esnull
.fuente
Integer::intValue
, también puede usari -> i
(que usa unboxing).Integer::intValue
, entonces, ¿por qué crear una nueva lambda, cuando el método está disponible?int[] ints = Arrays.stream(objects).mapToInt(i -> Integer.parseInt(i.toString())).toArray();
Espero que esto sea útil para cualquiera con el mismo problema. Y si alguien conoce una manera mejor, hágamelo saber.Usando guayaba :
int[] intArray = Ints.toArray(Arrays.asList(array));
Documentación:
Arrays.asList
(API principal)Ints.toArray
(Guayaba)fuente
No puede convertir una matriz de Integer a int (es decir, no puede cambiar el tipo de los elementos de una matriz) en Java. Por lo tanto, debe crear una nueva matriz int [] y copiar el valor de los objetos Integer en ella o puede usar un adaptador:
class IntAdapter { private Integer[] array; public IntAdapter (Integer[] array) { this.array = array; } public int get (int index) { return array[index].intValue(); } }
Esto puede hacer que su código sea un poco más legible y el objeto IntAdapter solo consumirá unos pocos bytes de memoria. La gran ventaja de un adaptador es que puede manejar casos especiales aquí:
class IntAdapter { private Integer[] array; public int nullValue = 0; public IntAdapter (Integer[] array) { this.array = array; } public int get (int index) { return array[index] == null ? nullValue : array[index].intValue(); } }
Otra solución es utilizar Commons Primitives, que contiene muchos adaptadores predefinidos. En su caso, eche un vistazo a ListIntList .
fuente
O simplemente hazlo de la manera fácil si lo vas a hacer solo una vez. Pero no has hablado de Integer! = Null case.
//array is the Integer array int[] array2 = new int[array.length]; int i=0; for (Integer integer : array) { array2[i] = integer.intValue(); i++; }
fuente
usar Dollar es tan simple como:
Integer[] array = ...; int[] primitiveArray = $(array).toIntArray();
fuente
$
! No creo que se animó, aunque ...