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

Введение В этом руководстве мы конвертируем массив в более универсальный ArrayList в Java. * Arrays.asList () * new ArrayList <> (Arrays.asList ()) (Самый популярный и используемый подход) * new ArrayList <> (List.of ()) * Collections.addAll () * Collectors.toList () * Collectors.toCollection () * Lists.newArrayList () Массивы просты и обеспечивают базовую функциональность группирования вместе коллекции объектов или примитивных типов данных. Однако и массивы ограничены - их размер фиксированный.

Вступление

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

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

К счастью, Collections Framework познакомила нас со многими очень полезными реализациями List , Set и Queue .

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

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

Arrays.asList ()

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

 Employee emp1 = new Employee("John"); 
 Employee emp2 = new Employee("Sarah"); 
 Employee emp3 = new Employee("Lily"); 
 
 Employee[] array = new Employee[]{emp1, emp2, emp3}; 
 
 List<Employee> list = Arrays.asList(array); 
 System.out.println(list); 

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

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

новый ArrayList <> (Arrays.asList ())

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

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

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

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

 Employee[] array = new Employee[]{emp1, emp2, emp3}; 
 
 List<Employee> list = new ArrayList<>(Arrays.asList(array)); 
 System.out.println(list); 

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

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

новый ArrayList <> (List.of ())

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

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

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

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

Collections.addAll ()

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

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

 Employee[] array = new Employee[]{emp1, emp2, emp3}; 
 List<Employee> list = new ArrayList<>(); 
 
 Collections.addAll(list, array); 
 System.out.println(list); 

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

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

Collectors.toList ()

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

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

Выполнение этого даст:

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

Collectors.toCollection ()

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

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

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

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

Lists.newArrayList ()

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

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

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

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

Заключение

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

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus