2014-02-12 44 views
24

我在尋找的是Object[] java.util.Collection.toArray()的通用版本,或者使用T[] java.util.Collection.toArray(T[] array)的替代品。我現在可以這樣寫:在Guava或Apache Commons Collections中是否有任何通用版本的toArray()?

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 []數組)一樣快。

+0

因此,基本上,你只是不想必須把在'array'參數,但你很高興把一個類名靜態方法和一個類文字呢? – chrylis

+0

事實上,你想減少一些等於'strings.size()'長度的字符會意味着你正在進行這種轉換而不是很多。那麼答案是,少做點。 –

+0

你很擔心,因爲還有8個角色很多? –

回答

7

您可以

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

這也恰好是更有效的縮短。

與Java 8,你也可以用這個,但似乎過於複雜和可能較慢:

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

謝謝。但是,我不能使用Java 8,也不想用'strings.toArray(new String [0])'在內存受限設備(android)上不必要地創建對象。另外,這些解決方案比'strings.toArray(new String [strings.size()]''更不可讀。 – Mihai

+4

如果這些新的String [0]對你的表現有所不同,恭喜,你必須有一個尖叫快速的應用程序。 –

+1

'new String [0]'實際上會更快:https://shipilev.net/blog/2016/arrays-wisdom-ancients/ –

2

番石榴語法是專門

Iterables.toArray(strings, String.class); 
相關問題