我有两个这样的Set
:
Set<String> set1;
Set<String> set2;
我想把它们和
Set<String> s = Stream.of(set1, set2).collect(Collectors.toSet());
但我得到了以下错误:
不存在类型变量的示例,因此Set<String>
符合String
推理变量T
具有不兼容的界限:
等式约束:String
下限:Set<String>
如何将Set
转换为具有flatMap()
的单个Set<String>
?是否有其他解决方案可以优雅地完成此操作?
3条答案
按热度按时间jv2fixgn1#
如果你坚持使用
Stream
,你可以使用flatMap
把你的Stream<Set<String>>
转换成一个Stream<String>
,它可以被收集到一个Set<String>
中:insrf1ej2#
您可以使用
Stream.concat
合并两个集合的流,并按集合进行收集。dxxyhpgq3#
有几种可能的方法-
合并
因为我们必须写入,所以对于超过2个流,它会变得稍微难看
Concat对于深度连接流可能是个问题。来自文档-
从重复串联构造流时要小心。访问深度串联流的元素可能会导致深度调用链,甚至StackOverflowException。
减少
Reduce还可用于执行流的连接,如-
这里
Stream.reduce(
)返回可选的,这就是orElseGet
方法调用的原因。也可以联系多个集合,如与深度接触流相关的问题也适用于减少
平面图
平面图可用于获得与以下相同的结果-
要连接多个流,可以使用-
平面Map避免了
StackOverflowException
。