30

有没有可以用来代替这种自定义方法的标准方法?

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

4 回答 4

32

不,JDK中没有这种方法。

然而,通常情况下,Apache Commons Lang提供了这样的方法

于 2010-04-06T15:04:51.720 回答
25

输入 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();
于 2015-06-04T05:49:04.853 回答
3

除了 YoYo 的回答,您可以对任何原始类型执行此操作;letprimArray是 type 的标识符PrimType[],那么您可以执行以下操作:

BoxedType[] boxedArray = IntStream.range(0, primArray.length).mapToObj(i -> primArray[i]).toArray(BoxedType[] :: new);
于 2016-04-01T18:02:05.883 回答
1

查看 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 做的事情。

于 2018-11-25T09:21:13.050 回答