Manera fácil de convertir Iterable en Colección

Resuelto Ula Krukar asked hace 13 años • 21 respuestas

En mi aplicación utilizo una biblioteca de terceros ( Spring Data for MongoDBpara ser exactos).

Los métodos de esta biblioteca regresan Iterable<T>, mientras que el resto de mi código espera Collection<T>.

¿Existe algún método de utilidad en algún lugar que me permita convertir rápidamente uno en otro? Me gustaría evitar crear un montón de foreachbucles en mi código para algo tan simple.

Ula Krukar avatar Jun 21 '11 02:06 Ula Krukar
Aceptado

En JDK 8+, sin utilizar bibliotecas adicionales:

Iterator<T> source = ...;
List<T> target = new ArrayList<>();
source.forEachRemaining(target::add);

Editar: el de arriba es para Iterator. Si estás tratando con Iterable,

iterable.forEach(target::add);
Thamme Gowda avatar May 27 '2015 06:05 Thamme Gowda

Con Guava puedes usar Lists.newArrayList(Iterable) o Sets.newHashSet(Iterable) , entre otros métodos similares. Por supuesto, esto copiará todos los elementos en la memoria. Si eso no es aceptable, creo que el código que funciona con estos debería utilizar Iterableen lugar de Collection. Guava también proporciona métodos convenientes para hacer cosas que puedes hacer Collectionusando un Iterable(como Iterables.isEmpty(Iterable)o Iterables.contains(Iterable, Object)), pero las implicaciones de rendimiento son más obvias.

ColinD avatar Jun 20 '2011 20:06 ColinD