2016-02-29 56 views
4

我有以下代碼:爲什麼在整數列表上調用flatMap失敗?

val input: List[Int] = List(1, 2, 3, 4) 

,我想呼籲它flatMap,但它需要我通過其產生的String,即一個函數,如果我試試這個:

input.flatMap(x => x + 1) 

然後我得到了以下錯誤:

:9: error: type mismatch; found : Int(1) required: String input.flatMap(x => x + 1)

有人可以解釋爲什麼是這樣的情況?我的原始input定義中沒有字符串,它是一個Int的列表。

+0

你想使用'map'。 – yw3410

回答

4

這種方式不能使用flatMap。 flatMap應該產生GenTraversableOnce,例如:

input.flatMap(x => List(x+1)) 

如果你只想增加列表中的每個項目,使用地圖方法,而不是

編譯消息大約需要字符串類型是相當混亂

+0

爲什麼錯誤消息說它需要一個字符串? – jcm

+0

不知道........ – Nyavro

+7

這是因爲編譯器試圖找到一個_implicit_轉換成'GenTraversableOnce',並且有'Int'到'String'的轉換,它擴展了'GenTraversableOnce [Char ]'。例如,這個代碼:'input.flatMap(x => x +「1」)'編譯和工作(雖然沒有做你可能試圖做的事情,這確實只需要map)。 –

0

考慮Option作爲集裝箱,與flatMap我們可以map容器中的值;注意例如

input.flatMap(x => Some(x+1)) 
List(2, 3, 4, 5) 
+0

儘管使用'Option [T]'確實是可行的,但它從側面跟蹤OP瞭解'flatMap'實際上做了什麼,以及爲什麼他實際上想要一個'map'。 –

相關問題