使用Guava连接ImmutableSet

时间:2019-07-09 19:23:29

标签: java linq guava

我习惯使用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>

做到这一点的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以使用Stream::flatMap方法:

collections
        .stream()
        .flatMap(collection -> loadKeys(collection.getTenant(), collection.getGroup()).stream())
        .collect(ImmutableSet.toImmutableSet());

请注意,您从stream方法结果中获得了loadKeys。假设ImmutableSet<String>返回Set,则此结果应为loadKeys