Scaladocによると、Scalaの並行ビューで奇妙な行動
ビューには、いくつかのコレクションの怠惰なバージョンです。 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
を適用すると、それは出力:
私はなぜperforma の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"))
可能であれば、イメージではなくカットごとにテキストを提供してください。 Btw: 'tn'とは何ですか、スレッド名ですか? –
画像がコピー&ペーストされたテキストの方がずっと良いでしょう。 –