Рубрики
Без рубрики

Преобразование массива примитивов в список

Узнайте, как преобразовать массив примитивов в список объектов соответствующего типа.

Автор оригинала: baeldung.

1. Обзор

В этом коротком уроке мы покажем, как преобразовать массив примитивов в Список объектов соответствующего типа . Как правило, мы можем попытаться использовать autoboxing в Java. Однако, как мы увидим в следующем разделе, наша интуиция о том, как работает автобокс, часто может быть ошибочной.

2. Проблема

Давайте начнем с определения проблемы. У нас есть массив примитивов ( int[] ), и мы хотим преобразовать этот массив в List ( List ). Интуитивная первая попытка может быть:

int[] input = new int[]{1,2,3,4};
List output = Arrays.asList(input);

К сожалению, это не будет компилироваться из-за несовместимости типов . Мы могли бы ожидать, что автобокс будет работать с массивами примитивов. Однако это инстинктивное убеждение неверно.

Автобокс происходит только для одного элемента (например, из int в Integer ). Не существует автоматического преобразования массива примитивных типов в массив их стандартных ссылочных типов (например, из int[] в Integer[] ).

Давайте начнем реализовывать несколько решений этой проблемы.

3. Итерация

Поскольку автобокс работает с отдельными примитивными элементами, простое решение состоит в том, чтобы просто перебирать элементы массива и добавлять их в Список один за другим :

int[] input = new int[]{1,2,3,4};
List output = new ArrayList();
for (int value : input) {
    output.add(value);
}

Мы решили эту проблему, но решение довольно многословно. Это подводит нас к следующей реализации.

4. Потоки

Начиная с Java 8, мы можем использовать Stream API . Мы можем предоставить однострочное решение, используя Поток :

int[] input = new int[]{1,2,3,4};
List output = Arrays.stream(input).boxed().collect(Collectors.toList());

В качестве альтернативы мы могли бы использовать IntStream :

int[] input = new int[]{1,2,3,4};
List output = IntStream.of(input).boxed().collect(Collectors.toList());

Это, конечно, выглядит намного приятнее. Далее мы рассмотрим несколько внешних библиотек.

5. Гуава

Библиотека Guava предоставляет оболочку вокруг этой проблемы . Давайте начнем с добавления зависимости Maven :


    com.google.guava
    guava
    29.0-jre
    bundle

Мы можем использовать Ints.asList () с аналогичными служебными классами для других примитивных типов:

int[] input = new int[]{1,2,3,4};
List output = Ints.asList(input);

6. Apache Commons

Другая библиотека-это Apache Commons Lang . Опять же, давайте добавим зависимость Maven для этой библиотеки:


    org.apache.commons
    commons-lang3
    3.11

Точнее, мы используем класс ArrayUtils :

int[] input = new int[]{1,2,3,4};
Integer[] outputBoxed = ArrayUtils.toObject(input);
List output = Arrays.asList(outputBoxed);

7. Заключение

Теперь у нас есть несколько вариантов в нашем наборе инструментов для преобразования массива примитивов в Список . Как мы уже видели, автобокс происходит только для отдельных элементов. В этом уроке мы рассмотрели несколько решений для применения преобразования .

Как всегда, полный исходный код статьи доступен на GitHub .