我正在寻找Java核心库中的静态方法或其他一些常用的依赖项 - 最好是Apache之一 - 执行以下操作:
public static <T> Collection<T> wrap(final T object){
final Collection<T> collection = new ArrayList<T>();
collection.add(object);
return collection;
}
你知道这种方法在哪里已经存在吗?由于我认为问题很常见,我不想复制它的解决方案。
答案 0 :(得分:59)
java.util.Collections.singleton(object)
会为您提供不可变的Set
。 singletonList
也可用。
效率较低java.util.Arrays.asList(object)
会给你一个可变的(可以使用list.set(0, x);
),但非结构上可更改(无法添加或删除)List
。它有点贵,因为在客户端创建了一个额外的数组。
答案 1 :(得分:11)
以下是从Java 8开始在List中包装Java对象的一些有效方法。
收藏。 singletonList :单项,不可变,自1.3起。
Collections.singletonList( object )
内部类支持的高性能。
收藏。 nCopies :自1.2以来,一个对象零到许多项目,不可变。
Collections.nCopies( number_of_copy, object )
内部类支持的高性能。所有项目都指向同一个对象。
数组。 asList :自1.2以来,任意数量的对象 size 不可变(单个元素可变)。
Arrays.asList( object1, object2, object3 )
由内部班级支持。项目转换为数组at compile time,此数组直接支持List。
new ArrayList(Collection) :自1.2以来,任意数量的对象都是可变的
new ArrayList<>( Arrays.asList( object1, object2, object3 ) )
ArrayList是使用array clone和array copy创建的,因此不使用任何循环。
答案 2 :(得分:2)
public static <E> ImmutableList<E> of(E element)
返回包含单个元素的不可变列表。这个清单 行为和表现相当于Collections.singleton(T),但会 不接受null元素。主要是为了一致性和优选 代码的可维护性。
答案 3 :(得分:1)
不要害怕自己写点东西。据我所知,它不存在。我认为这样做的一个原因是实用程序方法决定它使用的Collection的哪个实现。在您的情况下,您选择了ArrayList,但是还有很多其他集合。
答案 4 :(得分:1)
java.util.Collections.singletonList()或singleton()。请注意,结果是不可变的。