【发布时间】:2016-03-24 19:33:37
【问题描述】:
我无法加入在“parallelStream()”中创建的列表。 情况如下:
- 我有一个
List<Pair>,其中包含成对的“int”值 - 从每一对中,我使用“parallelStream()”生成
List<Edge> - 我想收集这些列表并将其加入“合并”
List<Edge>
我想做的(我希望它能够工作,遵循this answer 的最后一个要点)如下:
List<Edge> edges = pairs.parallelStream()
.map(p -> align(p.first(), p.second()))
.collect(ArrayList::new, List::add, List::addAll);
align() 进行 CPU 密集型工作(这就是为什么我首先需要“并行化”它)并返回 List<Edge>。
collect() 的使用使我无法编译,出现以下错误:
错误:java:不兼容的类型:无法推断类型变量 R、E(参数不匹配;无效的方法引用不兼容的类型:ArrayList 无法转换为 int)
请注意,我确实设法使类似(但“丑陋”的 imo)版本工作,这让我更加困惑:
v1:
List<List<Edge>> collect = pairs.parallelStream()
.map(p -> align(p.first(), p.second()))
.collect(Collectors.toList());
collect.forEach(l -> l.forEach(edges::add));
v2:
List<Edge> edges = new ArrayList<>();
pairs.parallelStream()
.map(p -> align(p.first(), p.second()))
.collect(Collectors.toList()).forEach(edges::addAll);
有人可以帮我解决这个问题吗?我想避免放弃和使用“v2”;)
【问题讨论】:
标签: java java-8 java-stream