web-dev-qa-db-ja.com

GuavaまたはApache Commons CollectionにtoArray()の汎用バージョンはありますか?

私が探しているのは、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);

このようなものはグアバまたはコモンズコレクションに実装されていますか?

もちろん、toArray(T []配列)と同じくらい速いように思える自分自身(上記)を書くこともできます。

28
Mihai

Iterables.toArray() グアバから。

43
axtavt

あなたはそれを短くすることができます

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

これもたまたま効率的です。

Java 8を使用すると、これを使用することもできますが、不必要に複雑になり、おそらく遅くなります。

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

Guava構文は特に

Iterables.toArray(strings, String.class);
9
methodsignature