据Scaladoc,奇怪的行为在斯卡拉并行查看
视图是一些集合的懒惰版本。集合变换器(如map或filter或++)在应用于视图时不会遍历任何元素。相反,他们创建了一个新的视图,它只是记录了该操作需要应用的事实。
这意味着操作将不会应用,直到元素被访问。但是如何平行?
看看这个例子:
def tn = Thread.currentThread.getName
val strList = List("I", "am", "a" , "student", ".", "I", "come", "from", "China", ".","I","love","peace")
val pvs = strList.par.view.filter{ s => println("f "+ tn); s == "I"}.map{s => println("m " + tn); s.toLowerCase}
第二个将打印出类似如下:
当您在pvs
申请foreach
,它输出:
我不明白为什么表演的并行风格NCE是不一样的正常之一:
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.view.filter{s => println("f"); s == "I"}.map{s => println("m"); s.toLowerCase}.foreach(s => println("p"))
如果可能的话,请提供每次cut'n'paste的文本,而不是图片。顺便说一下:什么是'tn',线名? –
Downvoted因为图像复制和粘贴文本会好得多。 –