Есть ли встроенный метод Java для коробки массива?
Вопрос
Есть ли стандартный метод, который я могу использовать вместо этого пользовательского метода?
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[]
.
Вы также можете легко выполнить обратное (Unboxing)
Integer [] boxedInts = ...
int [] ints = Stream.of(boxedInts).mapToInt(Integer::intValue).toArray();
В дополнение к ответу Yoyo вы можете сделать это для Любые Примитивный тип; позволять primArray
быть идентификатором типа 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;
Между тем, обычные инструменты Lint Java предполагают, что бокс не нужен, и вы можете просто назначить элементы, как есть.
По сути, вы делаете то же самое, что делает Apache Commons.