Java Guava或Apache Commons集合中是否有toArray()的通用版本?

Java Guava或Apache Commons集合中是否有toArray()的通用版本?,java,guava,apache-commons,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()]); 那么像这样的东西是在Guava还是在Commons集合中实现的呢 当然

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

Collection<String> strings;
String[] array = strings.toArray(new String[strings.size()]);
那么像这样的东西是在Guava还是在Commons集合中实现的呢


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

你可以用

String[] array = strings.toArray(new String[0]);
这也恰好更有效

对于Java 8,您也可以使用它,但它似乎不必要地复杂,而且速度可能较慢:

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

从Guava.

基本上,您不需要输入
数组
参数,但您很乐意为静态方法输入一个类名和一个类文本?事实上,您希望减少与
strings.size()相等的字符数
在长度上意味着您进行了相当多的转换。所以答案是,少用一点。你担心多用8个字符太多了吗?我也希望我能少用一点。更重要的是,
strings.size()。更重要的是,现在我可以编写
Iterables.toArray(fooreurningarray(),String.class)
。谢谢。但是,我不能使用Java 8,也不想在内存受限的设备(android)上使用
strings.toArray(新字符串[0])
不必要地创建对象。此外,这些解决方案的可读性并不比
strings.toArray(新字符串[strings.size()])
强多少。如果这些“新字符串[0]”对你的性能有任何影响,恭喜你,你一定有一个非常快的应用程序。
新字符串[0]
实际上会更快:@KarolS绝对正确,修正。后来我发现:
Iterables.toArray(strings,String.class)因为只有一个参数的toArray是包私有的。
String[] array = strings.toArray(new String[0]);
String[] array = strings.stream().toArray(String[]::new);     // Java 8