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

Как преобразовать массив Java в ArrayList

В этом уроке мы рассмотрим множество примеров того, как преобразовать массив Java в список массивов, указав на лучшие методы.

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

Вступление

В этом уроке мы преобразуем массив в более универсальный Список массивов на Java.

  • Массивы.asList()
  • новый ArrayList<>(Arrays.asList()) (Самый популярный и используемый подход)
  • новый ArrayList<>(Список ())
  • Коллекции.addAll()
  • Коллекционеры.тоЛист()
  • Коллекционеры.Коллекция()
  • Списки.newArrayList()

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

К счастью, Платформа Collections познакомила нас со многими очень полезными реализациями Списка s, Набора s и Очереди s.

Одним из них является ArrayList , действительно универсальная и популярная реализация Списка .

Конструктор ArrayList примет любую Коллекцию . Мы можем проявить творческий подход к типу коллекции, которую мы в нее передаем.

Массивы.asList()

Давайте начнем с простейшей формы преобразования. Вспомогательный класс Массивы содержит множество полезных методов. Метод asList() возвращает содержимое массива в Списке :

Employee emp1 = new Employee("John");
Employee emp2 = new Employee("Sarah");
Employee emp3 = new Employee("Lily");

Employee[] array = new Employee[]{emp1, emp2, emp3};

List list = Arrays.asList(array);
System.out.println(list);

Это приведет к тому, что реализация List ( ArrayList|/) будет заполнена emp1 , emp2 и emp3 . Выполнение этого кода приводит к:

[Employee{name='John'}, Employee{name='Sarah'}, Employee{name='Lily'}]

новый список массивов<>(Arrays.asList())

Лучшим подходом, чем просто присвоение возвращаемого значения вспомогательному методу, является передача возвращаемого значения в новый ArrayList<>() . Это стандартный подход, используемый большинством людей.

Это связано с тем, что метод asList() поддерживается исходным массивом.

Если вы измените исходный массив , список также изменится. Кроме того, asList() возвращает фиксированный размер, поскольку он поддерживается фиксированным массивом. Операции, которые расширят или сократят список, вернут исключение UnsupportedOperationException .

Чтобы избежать этого, мы применим функции ArrayList , передав возвращаемое значение as List() конструктору:

Employee[] array = new Employee[]{emp1, emp2, emp3};

List list = new ArrayList<>(Arrays.asList(array));
System.out.println(list);

Это приводит к:

[Employee{name='John'}, Employee{name='Sarah'}, Employee{name='Lily'}]

новый ArrayList<>(Список ())

Начиная с Java 9, вы можете пропустить инициализацию самого массива и передачу его в конструктор. Вы можете использовать List.of() и передавать отдельные элементы:

List list = new ArrayList<>(List.of(emp1, emp2, emp3));
System.out.println(list);

Это приводит к:

[Employee{name='John'}, Employee{name='Sarah'}, Employee{name='Lily'}]

Коллекции.addAll()

Класс Collections предлагает множество полезных вспомогательных методов, и среди них метод addAll () . Он принимает Коллекцию и vararg из элементов и объединяет их.

Он очень универсален и может использоваться со многими ароматами коллекции/vararg. Мы используем ArrayList и массив:

Employee[] array = new Employee[]{emp1, emp2, emp3};
List list = new ArrayList<>();

Collections.addAll(list, array);
System.out.println(list);

Это приводит к:

[Employee{name='John'}, Employee{name='Sarah'}, Employee{name='Lily'}]

Коллекционеры.тоЛист()

Если вы работаете с потоками, а не с обычными коллекциями, вы можете собрать элементы потока и упаковать их в список с помощью ToList() :

Employee[] array = new Employee[]{emp1, emp2, emp3};
List list = Stream.of(array).collect(Collectors.toList());
System.out.println(list);

Выполнение этого приведет к:

[Employee{name='John'}, Employee{name='Sarah'}, Employee{name='Lily'}]

Коллекционеры.Коллекция()

Аналогично, вы можете использовать метод to Collection() для сбора потоков в разные коллекции. В нашем случае мы введем в него ссылку ArrayList::new метод , хотя вы также можете указать другие ссылки:

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

Employee[] array = new Employee[]{emp1, emp2, emp3};
List list =  Stream.of(array)
        .collect(Collectors.toCollection(ArrayList::new));
System.out.println(list);

Это также приводит к:

[Employee{name='John'}, Employee{name='Sarah'}, Employee{name='Lily'}]

Списки.newArrayList()

Аналогично Arrays.asList() вспомогательному классу и методу, проект Google Guava познакомил нас с Списками вспомогательным классом. Вспомогательный класс Lists предоставляет метод newArrayList() :

Employee[] array = new Employee[]{emp1, emp2, emp3};
List list = Lists.newArrayList(array);

Теперь ключевым преимуществом этого подхода было то, что вам не нужно указывать тип при инициализации ArrayList . Это было действительно полезно, когда у вас был бы <Элемент <Элемент, элемент>> список.

Однако, поскольку Java 7 устранила необходимость явно задавать тип в операторе diamond, это устарело.

Вывод

Существует множество способов преобразования массива в ArrayList в Java. Они простираются от вызова вспомогательных методов до потоковой передачи массива и сбора элементов.