¿Hay un método flatten
en Guava, o una forma fácil de convertir un Iterable<Iterable<T>>
en un Iterable<T>
?Aplanamiento de un Iterable <Iterable<T>> en Guava
Tengo un Multimap<K, V>
[sourceMultimap] y quiero devolver todos los valores donde la clave coincida con algún predicado [keyPredicate]. Así que en el momento que tengo:
Iterable<Collection<V>> vals = Maps.filterKeys(sourceMultimap.asMap(), keyPredicate).values();
Collection<V> retColl = ...;
for (Collection<V> vs : vals) retColl.addAll(vs);
return retColl;
He mirado a través de los documentos de guayaba, pero nada saltó. Estoy comprobando que no me he perdido nada. De lo contrario, extraeré mis tres líneas en un método genérico abreviado y lo dejaré así.
Muchas gracias, no sé cómo me lo perdí! –
Supongo que esto se debe a que esta es una concatenación de un solo nivel, no se aplana realmente :) –
Además, si se está generando una colección a partir de una transformación de guayaba, puede usar FluentIterable transformAndConcat: http: //docs.guava-libraries.googlecode. com/git/javadoc/com/google/common/collect/FluentIterable.html # transformAndConcat (com.google.common.base.Function) –