36

我正在 Java 核心库或其他一些常用依赖项(最好是 Apache 中的一个)中寻找一个静态方法,它执行以下操作:

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

你知道哪里已经存在这样的方法吗?由于我猜这个问题很常见,我不想复制它的解决方案。

4

5 回答 5

66

java.util.Collections.singleton(object)会给你一个不可变的Set. singletonList也可用。

效率较低java.util.Arrays.asList(object)会给你一个可变的(可以使用list.set(0, x);),但在结构上不可更改(不能添加或删除)List。它有点贵,因为在客户端创建了一个额外的数组。

于 2012-04-11T12:24:16.997 回答
14

从 Java 8 开始,以下是一些在 List 中包装 Java 对象的有效方法。

收藏品。singletonList:单项,不可变,从 1.3 开始。
Collections.singletonList( object )
内部类支持的高性能。

收藏品。nCopies:一个对象,到多个项目,不可变,从 1.2 开始。
Collections.nCopies( number_of_copy, object )
内部类支持的高性能。所有项目都指向同一个对象。

大批。asList:自 1.2 起,任意数量的对象,大小不可变(单个元素可变)。
Arrays.asList( object1, object2, object3 )
由内部类支持。项目在编译时转换为数组,该数组直接支持 List。

new ArrayList(Collection):任意数量的对象,可变的,从 1.2 开始
new ArrayList<>( Arrays.asList( object1, object2, object3 ) )
ArrayList 是使用数组克隆数组副本创建的,因此不使用任何循环。

于 2015-03-10T10:59:44.227 回答
2

番石榴中的不可变列表

public static <E> ImmutableList<E> of(E element)

返回包含单个元素的不可变列表。此列表的行为和执行与 Collections.singleton(T) 相当,但不接受 null 元素。它主要是为了代码的一致性和可维护性。

于 2012-04-11T12:23:13.970 回答
1

不要害怕自己写东西。据我所知是不存在的。我认为这样做的一个原因是实用程序方法决定了它使用的 Collection 实现。在您的情况下,您选择了 ArrayList,但还有一大堆其他集合。

于 2012-04-11T12:22:19.910 回答
1

java.util.Collections.singletonList() 或 singleton()。请注意,结果是不可变的。

于 2012-04-11T12:25:05.703 回答