2010-04-06 12 views
21

Esiste un metodo standard che è possibile utilizzare al posto di questo metodo personalizzato?Esiste un metodo Java integrato per inserire un array?

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

Per curiosità, perché si desidera creare una matrice di valori in scatola? –

risposta

15

Enter Java 8, e si può fare seguendo (pugilato):

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

Tuttavia, questo funziona solo per int[], long[] e double[]. Questo non funzionerà per byte[].

Si può anche facilmente raggiungere il contrario (unboxing)

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

puoi anche: 'Lista boxedList = IntStream.of (ints) .boxed(). Collect (Collectors.toList())' – juanmf

+0

@juanmf corretto, ma che non risponde direttamente al post: una 'Lista ' è non un 'Integer [] 'come richiesto per un _array_ in scatola. – YoYo

1

Oltre alla risposta di YoYo, si può fare questo per qualsiasi tipo primitivo; cerchiamo primArray essere un identificatore di tipo PrimType[], allora si può effettuare le seguenti operazioni:

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

Ho visto questa soluzione diverse volte e nel mio intestino non sembra una soluzione pulita (il modo in cui inserisci una variabile non inclusa). Comunque non sembra che trovi una vera argomentazione contro di essa. – YoYo