在Guava或Apache Commons Collections中是否有toArray()的通用版本?

时间:2014-02-12 13:43:50

标签: java guava apache-commons

我正在寻找的是Object[] java.util.Collection.toArray()的通用版本或使用T[] java.util.Collection.toArray(T[] array)的不那么详细的替代方法。我现在可以写:

Collection<String> strings;
String[] array = strings.toArray(new String[strings.size()]);

我正在寻找的是:

@SuppressWarnings("unchecked")
public static <T> T[] toArray(Collection<T> collection, Class<T> clazz) {
    return collection.toArray((T[]) Array.newInstance(clazz, collection.size()));
}

然后我可以用作:

String[] array = Util.toArray(strings, String.class);

在Guava或Commons Collections中实现的是什么?

当然我可以编写自己的(上面的),这似乎和theArray(T []数组一样快)。

3 个答案:

答案 0 :(得分:43)

来自番石榴的

Iterables.toArray()

答案 1 :(得分:9)

您可以使用

缩短它
String[] array = strings.toArray(new String[0]);

也恰好更有效率。

使用Java 8,您也可以使用它,但它似乎不必要地复杂并且可能更慢:

String[] array = strings.stream().toArray(String[]::new);     // Java 8

答案 2 :(得分:7)

Guava语法具体是

Iterables.toArray(strings, String.class);