По словам Скаладока,
Представление - это ленивая версия некоторой коллекции.Преобразователи коллекций, такие как 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}
Вторая будет распечатана следующим образом:
При подаче foreach
on pvs
, он выводит:
Я не могу понять, почему производительность стиля Parallel отличается от обычной:
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"))