原谅我我的英语不好,但我会尽力表达我的问题。

假设我要处理一个大文本,其操作是通过关键字过滤内容;将它们更改为小写;然后将它们打印到标准输出上。众所周知,我们可以使用Linux BASH脚本中的管道来完成此操作:

cat article.txt | grep "I" | tr "I" "i" > /dev/stdout

其中cat article.txtgrep "I"tr "I" "i" > /dev/stdout并行运行。

在Scala中,我们大概是这样的:
//or read from a text file , e.g. article.txt
val strList = List("I", "am", "a" , "student", ".", "I", "come", "from", "China", ".","I","love","peace")
strList.filter( _ == "I").map(_.toLowerCase).foreach(println)

我的问题是如何使filtermapforeach并行?

谢谢

最佳答案

在2.9中,添加了并行集合。要并行化循环,您要做的就是通过调用par成员函数对其进行转换。

您的代码如下所示:

val strList = List("I", "am", "a" , "student", ".", "I", "come", "from", "China", ".","I","love","peace")  // or read from a text file , e.g. article.txt
strList.par.filter( _ == "I").map(_.toLowerCase).foreach(println)

关于scala - 我们能否在Scala中定义一组DSL操作,它们彼此并行执行,就像在Linux中使用管道处理一样,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8891732/

10-16 05:48