是否有内置的Java方法来装箱阵列?

时间:2010-04-06 15:03:07

标签: java boxing

我可以用一种标准方法代替这种自定义方法吗?

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;
}

4 个答案:

答案 0 :(得分:24)

不,JDK中没有这样的方法。

但通常情况是,Apache Commons Lang提供such a method

答案 1 :(得分:16)

输入Java 8,您可以执行以下操作(装箱):

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

但是,这仅适用于int[]long[]double[]。这不适用于byte[]

您也可以轻松完成反向(拆箱)

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

答案 2 :(得分:2)

除了YoYo的答案之外,您还可以为任何原语类型执行此操作;让primArray成为PrimType[]类型的标识符,然后您可以执行以下操作:

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

答案 3 :(得分:0)

查看Apache Commons Lang源代码时,我们可以看到它只是在每个数组元素上调用Byte#valueOf(byte)

    final Byte[] result = new Byte[array.length];
    for (int i = 0; i < array.length; i++) {
        result[i] = Byte.valueOf(array[i]);
    }
    return result;

同时,常规的java lint工具建议不要装箱,您可以按原样分配元素。

因此,从本质上讲,您正在做与Apache Commons相同的事情。