2014-03-06 94 views
1

我有兩個列表,我壓縮並通過壓縮結果並調用一個函數。該函數返回一個字符串列表作爲響應。我現在想要收集所有我收到的回覆,並且我不想擁有某種緩衝器來收集每次迭代的響應。Scala中的函數風格,以收集方法的結果

seq1.zip(seq2).foreach((x: (Obj1, Obj1)) => { 
    callMethod(x._1, x._2) // This method returns a Seq of String when called 
} 

我想避免的是創建一個ListBuffer並繼續收集它。任何線索在功能上做到這一點?

+1

只需使用'.map'而不是'.foreach'。或者你甚至可以使用'.flatMap'來將你的'List [Seq [String]]'變成'List [String]' – serejja

回答

3

爲什麼不使用map()將每個輸入轉換爲相應的輸出?下面是map()在一個簡單的場景操作:

scala> val l = List(1,2,3,4,5) 
scala> l.map(x => x*2) 
res60: List[Int] = List(2, 4, 6, 8, 10) 

所以在你的情況下,它看起來是這樣的:

seq1.zip(seq2).map((x: (Obj1, Obj1)) => callMethod(x._1, x._2)) 

鑑於你的函數返回字符串的序列,你使用flatMap()壓扁結果合併成一個序列。