Утилитный метод для обертывания объекта в коллекции
Я ищу статический метод в базовых библиотеках Java или какой-либо другой часто используемой зависимости - желательно один из Apache - который выполняет следующие действия:
public static <T> Collection<T> wrap(final T object){
final Collection<T> collection = new ArrayList<T>();
collection.add(object);
return collection;
}
Вы знаете, где такой метод уже существует? Поскольку я предполагаю, что проблема распространена, я не хочу дублировать ее решение.
Ответы
Ответ 1
java.util.Collections.singleton(object)
даст вам неизменный Set
. singletonList
также доступен.
Менее эффективно java.util.Arrays.asList(object)
даст вам mutable (может использовать list.set(0, x);
), но неструктурно изменчив (не может добавлять или удалять) List
. Это немного дороже, так как есть дополнительный массив, созданный на стороне клиента.
Ответ 2
Вот несколько эффективных способов обернуть объекты Java в List, начиная с Java 8.
Коллекции. singletonList: Отдельный элемент, неизменяемый, начиная с 1.3.
Collections.singletonList( object )
Высокая производительность поддерживается внутренним классом.
Коллекции. nCopies: один объект, от нуля до многих элементов, неизменяемый, начиная с 1.2.
Collections.nCopies( number_of_copy, object )
Высокая производительность поддерживается внутренним классом. Все предметы указывают на один и тот же объект.
Массив. asList: любое количество объектов неизменного размера (изменяемые отдельные элементы), начиная с 1.2.
Arrays.asList( object1, object2, object3 )
При поддержке внутреннего класса. Элементы преобразуются в массив во время компиляции, и этот массив непосредственно поддерживает список.
новый ArrayList (Коллекция): любое количество объектов, изменяемых, начиная с 1.2
new ArrayList<>( Arrays.asList( object1, object2, object3 ) )
ArrayList создается с клоном массива и копией массива и поэтому не использует никаких циклов.
Ответ 3
Необязательный список в guava
public static <E> ImmutableList<E> of(E element)
Возвращает неизменяемый список, содержащий один элемент. Этот список ведет себя и выполняет сравнение с Collections.singleton(T), но будет не принимать нулевой элемент. Это предпочтительнее в основном для согласованности и поддерживаемость вашего кода.
Ответ 4
Не бойтесь писать что-то самостоятельно. Насколько я знаю, этого не существует. Я считаю, что причина в том, что метод утилиты определяет, какую реализацию Collection он использует. В вашем случае вы выбрали ArrayList, но есть целая куча других коллекций.
Ответ 5
java.util.Collections.singletonList() или singleton(). Обратите внимание, что результат неизменен.