【发布时间】:2017-07-07 02:42:50
【问题描述】:
是否有任何(希望是开箱即用的)方法来并行遍历 Scala 流?
例如,看看这个 java 8 代码:
String[] s = {"a","b","c","d","e"};
List<String> list = Arrays.asList(s);
list.parallelStream().forEach(System.out::println);
这将并行打印所有列表流内容.. 但是,据我了解,scala 中的流是连续的。
有什么解决方法吗?
编辑: 请注意,流允许我们在数据到达时对其进行处理。然后,如果不需要数据,请将它们从内存中删除。 例如:
"abcd".toStream.filter { x =>
println(s"1 filter $x")
if(x.toInt%2==0) true;else false;
} //end of first block
.foreach { x =>
println(s"2 filter->$x")
} //end of second block
将输出如下内容:
1 个过滤器
1 个过滤器 b
2 过滤器->b
1 个过滤器 c
1 个过滤器 d
2 过滤器->d
另一方面,下面的代码将分块处理数据。在每次转换时将变量保存在内存中:
"abcd".toVector.par.filter { x =>
println(s"1 filter $x")
if(x.toInt%2==0) true;else false;
} //end of first block
.foreach { x =>
println(s"2 filter->$x")
} //end of second block
输出: 1个过滤器c
1 个过滤器
1 个过滤器 b
1 个过滤器 d
2 过滤器->b
2 过滤器->d
【问题讨论】:
-
除了下面提供更多信息的答案之外,这里还有一个可以做你想做的事情:
('a' to 'e').par.foreach(println _) -
@evan.oman 我认为目前的任何答案都不能解决这个问题