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

Mih*_*hai 28 java apache-commons guava

我正在寻找的是使用的通用版本Object[] java.util.Collection.toArray()或更简洁的替代品T[] java.util.Collection.toArray(T[] array).我现在可以写:

Collection<String> strings;
String[] array = strings.toArray(new String[strings.size()]);
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是:

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

我可以用它作为:

String[] array = Util.toArray(strings, String.class);
Run Code Online (Sandbox Code Playgroud)

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

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

axt*_*avt 44

Iterables.toArray() 来自番石榴.


ass*_*ias 9

你可以缩短它

String[] array = strings.toArray(new String[0]);
Run Code Online (Sandbox Code Playgroud)

这也恰好更有效率.

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

String[] array = strings.stream().toArray(String[]::new);     // Java 8
Run Code Online (Sandbox Code Playgroud)

  • 如果那些新的String [0]对你的表现有任何影响,恭喜你,你必须有一个尖叫的快速应用程序. (4认同)
  • `new String[0]` 实际上会更快:https://shipilev.net/blog/2016/arrays-wisdom-ancients/ (2认同)