Подтвердить что ты не робот

Есть ли общая версия toArray() в коллекциях 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()]);

То, что я ищу, это что-то вроде:

@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);

Итак, что-то вроде этого реализовано в Guava или в коллекциях Commons?

Конечно, я могу написать свой собственный (выше), который, кажется, так же быстро, как массивArray (T []).

4b9b3361

Ответ 2

Вы можете сократить его с помощью

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

который также оказывается более эффективным.

С Java 8 вы также можете использовать это, но оно кажется излишне сложным и, вероятно, медленнее:

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

Ответ 3

Синтаксис Guava специально

Iterables.toArray(strings, String.class);