Подтвердить что ты не робот

Утилитный метод для обертывания объекта в коллекции

Я ищу статический метод в базовых библиотеках Java или какой-либо другой часто используемой зависимости - желательно один из Apache - который выполняет следующие действия:

public static <T> Collection<T> wrap(final T object){
    final Collection<T> collection = new ArrayList<T>();
    collection.add(object);
    return collection;
}

Вы знаете, где такой метод уже существует? Поскольку я предполагаю, что проблема распространена, я не хочу дублировать ее решение.

4b9b3361

Ответ 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(). Обратите внимание, что результат неизменен.