qdr*_*ien 4 java java-8 java-stream
我在加入在"parallelStream()"中创建的列表时遇到问题.情况如下:
List<Pair>包含"int"值的对List<Edge>使用"parallelStream()"List<Edge>我想做的事情(我希望它能够按照这个答案的最后一个要点发挥作用)如下:
List<Edge> edges = pairs.parallelStream()
.map(p -> align(p.first(), p.second()))
.collect(ArrayList::new, List::add, List::addAll);
Run Code Online (Sandbox Code Playgroud)
随着align()做CPU密集型的工作(这就是为什么我需要摆在首位,以"并行"的话),并返回List<Edge>.
使用collect()阻止我编译,给出以下错误:
错误:java:不兼容类型:无法推断类型变量R,E(参数不匹配;无效方法引用不兼容类型:ArrayList <Edge>无法转换为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));
Run Code Online (Sandbox Code Playgroud)
v2:
List<Edge> edges = new ArrayList<>();
pairs.parallelStream()
.map(p -> align(p.first(), p.second()))
.collect(Collectors.toList()).forEach(edges::addAll);
Run Code Online (Sandbox Code Playgroud)
有人可以帮我弄这个吗?我想避免放弃并使用"v2";)
这不是100%清晰,但看起来你可能想要
List<Edge> edges = pairs.parallelStream()
.flatMap(p -> align(p.first(), p.second()).stream())
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
781 次 |
| 最近记录: |