我们可以在Scala中定义一组DSL操作,它们彼此并行执行,就像在Linux中使用管道处理一样

爱国者*_*爱国者 5 parallel-processing scala

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

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

cat article.txt | grep "I" | tr "I" "i" > /dev/stdout
Run Code Online (Sandbox Code Playgroud)

其中cat article.txt,grep "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)
Run Code Online (Sandbox Code Playgroud)

我的问题是,我们如何才能使filter,mapforeach水货?

谢谢

tst*_*ner 2

在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)
Run Code Online (Sandbox Code Playgroud)