2010-04-06 9 views
21

¿Hay algún método estándar que pueda usar en lugar de este método personalizado?¿Hay un método incorporado de Java para encajonar una matriz?

public static Byte[] box(byte[] byteArray) { 
    Byte[] box = new Byte[byteArray.length]; 
    for (int i = 0; i < box.length; i++) { 
     box[i] = byteArray[i]; 
    } 
    return box; 
} 
+0

Por curiosidad, ¿por qué desea crear una matriz de valores en caja? –

Respuesta

15

Introduzca Java 8, y se puede hacer lo siguiente (boxeo):

int [] ints = ... 
Integer[] boxedInts = IntStream.of(ints).boxed().toArray(Integer[]::new); 

Sin embargo, esto sólo funciona para int[], long[] y double[]. Esto no funcionará para byte[].

También puede lograr fácilmente la inversa (unboxing)

Integer [] boxedInts = ... 
int [] ints = Stream.of(boxedInts).mapToInt(Integer::intValue).toArray(); 
+2

también puede: 'List boxedList = IntStream.of (ints) .boxed(). Collect (Collectors.toList())' – juanmf

+0

@juanmf correcto, pero eso no responde directamente a la publicación: a 'List ' is no es un 'Integer []' como se solicita para un _array_ en caja. – YoYo

1

Además de la respuesta de Yoyo, se puede hacer esto para cualquier tipo primitivo; vamos primArray ser un identificador de tipo PrimType[], entonces usted puede hacer lo siguiente:

BoxedType[] boxedArray = IntStream.range(0, primArray.length).mapToObj(i -> primArray[i]).toArray(BoxedType[] :: new); 
+0

He visto esta solución varias veces, y en mis entrañas no parece una solución limpia (la forma en que traes una variable no encerrada). Sin embargo, parece que no encuentro un buen argumento en contra. – YoYo

Cuestiones relacionadas