據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因爲圖像複製和粘貼文本會好得多。 –