2010-04-06 18 views
21

Existe-t-il une méthode standard que je peux utiliser à la place de cette méthode personnalisée?Existe-t-il une méthode Java intégrée pour encadrer un tableau?

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

Par curiosité, pourquoi voulez-vous créer un tableau de valeurs en boîte? –

Répondre

15

Entrez Java 8, et vous pouvez faire à la suite (la boxe):

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

Cependant, cela ne fonctionne que pour int[], long[] et double[]. Cela ne fonctionnera pas pour byte[].

Vous pouvez également réaliser facilement l'inverse (unboxing)

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

vous pouvez également: 'Liste boxedList = IntStream.of (ints) .boxed(). Collect (Collectors.toList())' – juanmf

+0

@juanmf correct, mais cela ne répond pas directement au message: une 'Liste ' est pas un 'Integer []' comme demandé pour un _array_ encadré. – YoYo

1

En plus de la réponse de YoYo, vous pouvez le faire pour tout type primitif; laissez primArray être un identifiant de type PrimType[], alors vous pouvez effectuer les opérations suivantes:

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

J'ai vu cette solution plusieurs fois - et dans mes tripes cela ne semble pas être une solution propre (la façon dont vous introduisez une variable non incluse). Cependant, je ne semble pas trouver un très bon argument contre. – YoYo