我习惯使用C#,我们有IEnumerable<T>.SelectMany
,但是发现自己使用Google的Guava库涉嫌某些Java代码。番石榴里有相当于SelectMany的东西吗?
示例: 如果我有这样的流/地图构造
collections
.stream()
.map(collection -> loadKeys(collection.getTenant(), collection.getGroup()))
.collect(GuavaCollectors.immutableSet());
其中loadKeys
返回类似ImmutableSet<String>
的地方,该函数将返回ImmutableSet<ImmutableSet<String>>
,但我想将它们平整为一个ImmutableSet<String>
做到这一点的最佳方法是什么?
答案 0 :(得分:3)
您可以使用Stream::flatMap
方法:
collections
.stream()
.flatMap(collection -> loadKeys(collection.getTenant(), collection.getGroup()).stream())
.collect(ImmutableSet.toImmutableSet());
请注意,您从stream
方法结果中获得了loadKeys
。假设ImmutableSet<String>
返回Set,则此结果应为loadKeys
。