有没有可以用来代替这种自定义方法的标准方法?
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;
}
不,JDK中没有这种方法。
然而,通常情况下,Apache Commons Lang提供了这样的方法。
输入 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();
除了 YoYo 的回答,您可以对任何原始类型执行此操作;letprimArray
是 type 的标识符PrimType[]
,那么您可以执行以下操作:
BoxedType[] boxedArray = IntStream.range(0, primArray.length).mapToObj(i -> primArray[i]).toArray(BoxedType[] :: new);
查看 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 做的事情。