在番石榴中展平Iterable <Iterable <T >>

And*_*eld 40 java collections flatten guava

flatten在番石榴中是否有一种方法 - 或者将一种方法转换Iterable<Iterable<T>>为一种方法Iterable<T>

我有一个Multimap<K, V>[sourceMultimap],我想返回键匹配某个谓词[keyPredicate]的所有值.所以目前我有:

Iterable<Collection<V>> vals = Maps.filterKeys(sourceMultimap.asMap(), keyPredicate).values();

Collection<V> retColl = ...;
for (Collection<V> vs : vals) retColl.addAll(vs);
return retColl;
Run Code Online (Sandbox Code Playgroud)

我查看了番石榴文档,但没有跳出来.我只是检查我没有错过任何东西.否则,我会将我的三行提取为一个简短的扁平泛型方法,并保持原样.

Sea*_*ons 73

Iterables.concat方法满足这一要求:

public static <T> Iterable<T> concat(Iterable<? extends Iterable<? extends T>> inputs)
Run Code Online (Sandbox Code Playgroud)

  • 我猜这是因为这只是一级连接,而不是真正扁平化:) (6认同)