Как быстро и удобно создать один элемент arraylist

Есть ли способ Утилиты где-нибудь, который может сделать это в 1 строке? Я не могу найти его нигде в Collections или List.

public List<String> stringToOneElementList(String s) {
    List<String> list = new ArrayList<String>();
    list.add(s);
    return list;
}

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

Ну... тип может быть T, а не String. но вы понимаете. (со всей нулевой проверкой, проверками безопасности и т.д.)

Ответ 1

Фиксированный размер List

Самый простой способ, который я знаю, - создать одиночный элемент фиксированного размера List с Arrays.asList(T...), например

// Returns a List backed by a varargs T.
return Arrays.asList(s);

Переменный размер List

Если вам нужно изменить размер, вы можете построить ArrayList и List с фиксированным размером, например

return new ArrayList<String>(Arrays.asList(s));

и (в Java 7+) вы можете использовать алмазный оператор <>, чтобы сделать его

return new ArrayList<>(Arrays.asList(s));

Ответ 2

Collections.singletonList(object)

Ответ 3

Вы можете использовать метод утилиты Arrays.asList и подать этот результат в новый ArrayList.

ArrayList<String> list = new ArrayList<String>(Arrays.asList(s));

Другие параметры:

ArrayList<String> list = new ArrayList<String>(Collections.nCopies(1, s));

и

ArrayList<String> list = new ArrayList<String>(Collections.singletonList(s));

Ответ 4

С потоками Java 8:

Stream.of(object).collect(Collectors.toList())

или если вам нужен набор:

Stream.of(object).collect(Collectors.toSet())

Ответ 5

Очень просто:

Arrays.asList("Hi!")

Ответ 6

Другие ответы на все используют Arrays.asList(), который возвращает немодифицируемый список (при нажатии UnsupportedOperationException при попытке добавить или удалить элемент). Чтобы получить измененный список, вы можете обернуть возвращаемый список в новый ArrayList, как указано в нескольких ответах, но более чистым решением будет использование Guava Lists.newArrayList() (доступно, по крайней мере, Guava 10, выпущенный в 2011 году).

Например:

Lists.newArrayList("Blargle!");

Ответ 7

Увидев, что Гува получает упоминание, я подумал, что также предлагаю Eclipse Collections (ранее известный как коллекции GS).

В следующих примерах все возвращают List с одним элементом.

Lists.mutable.of("Just one item");
Lists.mutable.with("Or use with");
Lists.immutable.of("Maybe it must be immutable?");
Lists.immutable.with("And use with if you want");

Существуют аналогичные методы для других коллекций.

Ответ 8

Еще одна альтернатива двойная инициализация скобок, например

new ArrayList<String>() {{ add(s); }};

но он неэффективен и неясен. Поэтому подходит только:

  • в коде, который не учитывает утечки памяти, такие как большинство модульных тестов и другие краткосрочные программы;
  • и если ни одно из других решений не применимо, я думаю, что вы прокрутили весь путь вниз, пытаясь заполнить другой тип контейнера, чем ArrayList в вопросе.