Возможно, не намного эффективнее, но намного понятнее будет Iterables.toArray(Iterable, Class)
Это в значительной степени делает то, что вы уже делаете:
public static <T> T[] toArray(Iterable<? extends T> iterable, Class<T> type) {
Collection<? extends T> collection = toCollection(iterable);
T[] array = ObjectArrays.newArray(type, collection.size());
return collection.toArray(array);
}
При использовании collection.size()
это должно быть даже быстрее, чем создание массива нулевой длины только для информации о типе, а toArray()
создает массив правильного размера из этого.