Есть ли встроенный метод Java для коробки массива?

StackOverflow https://stackoverflow.com/questions/2585907

  •  24-09-2019
  •  | 
  •  

Вопрос

Есть ли стандартный метод, который я могу использовать вместо этого пользовательского метода?

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top