首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在芭乐中展平Iterable<Iterable<T>>

在芭乐中展平Iterable<Iterable<T>>
EN

Stack Overflow用户
提问于 2011-05-10 19:11:12
回答 2查看 15.3K关注 0票数 41

Guava中有没有一种flatten方法-或者一种将Iterable<Iterable<T>>转换为Iterable<T>的简单方法

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

代码语言:javascript
复制
Iterable<Collection<V>> vals = Maps.filterKeys(sourceMultimap.asMap(), keyPredicate).values();

Collection<V> retColl = ...;
for (Collection<V> vs : vals) retColl.addAll(vs);
return retColl;

我看过芭乐文档,但什么都没跳出来。我只是想确认一下我没有遗漏任何东西。否则,我将把我的三行代码提取到一个简短的flatten泛型方法中,并让它保持原样。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-10 19:31:02

Iterables.concat method满足该要求:

代码语言:javascript
复制
public static <T> Iterable<T> concat(Iterable<? extends Iterable<? extends T>> inputs)
票数 74
EN

Stack Overflow用户

发布于 2015-01-09 12:48:46

从Java 8开始,您可以在没有Guava的情况下做到这一点。它有点笨拙,因为Iterable doesn't directly provide streams需要使用StreamSupport,但它不需要像问题中的代码那样创建一个新的集合。

代码语言:javascript
复制
private static <T> Iterable<T> concat(Iterable<? extends Iterable<T>> foo) {
    return () -> StreamSupport.stream(foo.spliterator(), false)
        .flatMap(i -> StreamSupport.stream(i.spliterator(), false))
        .iterator();
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5949091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档