Как быстро и удобно создать один элемент 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 в вопросе.