Автор оригинала: 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() и передавать отдельные элементы:
Listlist = 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. Они простираются от вызова вспомогательных методов до потоковой передачи массива и сбора элементов.