2016-02-02 105 views
0

我想知道它們何時都在做同樣的事情,在第二條語句中使用第一條語句的可能用例是什麼。在Scala中映射和性能比較

val xs = List[Int](1,2,3,4,5,6) 

的號碼清單:

for (x <- xs if x%2 == 0) 
      yield x*10 

一樣:

xs.filter(_%2 == 0).map(_*10) 

回答

4

我認爲這是沒有性能上的差異。使用引擎蓋下的for循環的代碼將被翻譯成代碼filtermap(詳細信息可能因Scala版本而異)。這是你想要使用哪個版本的問題。有關更多詳細信息,請參見answer

+0

謝謝:)如果操作在火花RDD上執行,您會認爲會發生什麼? (我的意思是,如果xs是RDD?) –

+0

將for循環轉換爲map/for代碼由編譯器執行。這意味着它應該以相同的方式工作,而不管使用什麼樣的收集。 –

+0

有道理:)謝謝。 –