2010-04-06 4 views
21

Gibt es eine Standardmethode, die ich anstelle dieser benutzerdefinierten Methode verwenden kann?Gibt es eine integrierte Java-Methode, um ein Array zu boxen?

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

Aus Neugier, warum wollen Sie eine Reihe von boxed Werte schaffen? –

Antwort

15

Geben Sie Java 8, und Sie können folgende (Boxen) tun:

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

Allerdings funktioniert dies nur für int[], long[] und double[]. Dies funktioniert nicht für byte[].

Sie können auch das Gegenteil leicht erreichen (Unboxing)

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

können Sie auch: 'Liste boxedList = IntStream.of (ints) .boxed(). Sammeln (Collectors.toList())' – juanmf

+0

@juanmf richtig, aber das beantwortet nicht den Beitrag direkt: eine 'Liste ' ist kein 'Integer []' wie für ein Boxed _array_ angefordert. – YoYo

1

Neben YoYo Antwort, können Sie dies für tun jede primitive Art; lassen primArray eine Kennung vom Typ PrimType[] sein, dann können Sie Folgendes tun:

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

Ich habe diese Lösung mehrmals gesehen - und in meinen Eingeweiden scheint es nicht wie eine saubere Lösung (die Art, wie Sie eine nicht eingeschlossene Variable bringen). Ich finde jedoch kein wirklich gutes Argument dagegen. – YoYo

Verwandte Themen