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

2022-09-01 09:35:37

我正在寻找的是一个通用版本或一个不太冗长的替代方法。我目前可以写: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);

那么,在番石榴或共享资源收藏中实现了类似的东西吗?

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


答案 1

Iterables.toArray() 来自 Guava.


答案 2

您可以缩短它

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

这也恰好更有效率。

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

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

推荐