33

Инициализация ArrayList в одну строчку

19

Я хотел создать список опций для тестирования. Сначала я сделал это следующим образом:

ArrayList<String> places = new ArrayList<String>();
places.add("Buenos Aires");
places.add("Córdoba");
places.add("La Plata");

Затем я рефакторировал код следующим образом:

ArrayList<String> places = new ArrayList<String>(
    Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));

Есть ли более удобный способ сделать это?

5 ответ(ов)

27

Вам будет проще объявить это как List. Действительно ли это должно быть именно ArrayList?

List<String> places = Arrays.asList("Буэнос-Айрес", "Кордова", "Ла-Плата");

Если у вас только один элемент, вы можете сделать так:

List<String> places = Collections.singletonList("Буэнос-Айрес");

Это означает, что places будет неизменяемым (попытка изменить его приведет к выбросу исключения UnsupportedOperationException).

Если вы хотите создать изменяемый список на основе конкретного ArrayList, то вы можете создать ArrayList, используя неизменяемый список:

ArrayList<String> places = new ArrayList<>(Arrays.asList("Буэнос-Айрес", "Кордова", "Ла-Плата"));

Не забудьте импортировать нужный пакет:

import java.util.Arrays;
1

Если вам нужен простой список размером 1:

List<String> strings = new ArrayList<String>(Collections.singletonList("A"));

Если вам нужен список с несколькими объектами:

List<String> strings = new ArrayList<String>();
Collections.addAll(strings, "A", "B", "C", "D");

Оба варианта позволяют вам удобно создавать списки нужного размера и содержимого.

0

В Java 8 не были добавлены литералы коллекций, но вы можете использовать Stream API, чтобы инициализировать список одним достаточно длинным выражением:

List<String> places = Stream.of("Буэнос-Айрес", "Кордоба", "Ла Плата").collect(Collectors.toList());

Если вам нужно гарантировать, что ваш List является экземпляром ArrayList, вы можете сделать это следующим образом:

ArrayList<String> places = Stream.of("Буэнос-Айрес", "Кордоба", "Ла Плата").collect(Collectors.toCollection(ArrayList::new));

Такой подход позволяет элегантно создавать коллекции с помощью Stream API, избегая создания дополнительных переменных или промежуточных шагов.

0

В данном коде используется класс ImmutableList из библиотеки Guava для создания неизменяемого списка строк.

Код создает список, который содержит названия городов Аргентины: "Буэнос-Айрес", "Кордова" и "Ла Плата". Благодаря тому, что этот список неизменяемый, вы не сможете добавлять, удалять или изменять элементы после его создания. Это может помочь избежать ошибок, связанных с изменением содержимого коллекции в процессе её использования.

Вот пример данного кода:

import com.google.common.collect.ImmutableList;

...

List<String> places = ImmutableList.of("Buenos Aires", "Córdoba", "La Plata");

Если нужен изменяемый список, вы можете использовать стандартный ArrayList:

List<String> places = new ArrayList<>(Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));

Таким образом, выбор между ImmutableList и изменяемым списком зависит от вашего конкретного случая и требований к изменяемости данных.

0

Вы можете создать фабричный метод:

public static ArrayList<String> createArrayList(String ... elements) {
  ArrayList<String> list = new ArrayList<String>();
  for (String element : elements) {
    list.add(element);
  }
  return list;
}

....

ArrayList<String> places = createArrayList(
  "São Paulo", "Rio de Janeiro", "Brasília");

Но это не намного лучше вашего первоначального решения.

Для большей гибкости вы можете сделать метод универсальным:

public static <T> ArrayList<T> createArrayList(T ... elements) {
  ArrayList<T> list = new ArrayList<T>();
  for (T element : elements) {
    list.add(element);
  }
  return list;
}

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

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь