scala类型不匹配错误,需要GenTraversableOnce [?]

zap*_*dlo 10 scala

为什么此代码会导致编译错误

类型不匹配; 发现:(Int,Char)必需:scala.collection.GenTraversableOnce [?]

val n = Map(1 -> 'a', 4 -> 'a')
def f(i: Int, c: Char) = (i -> c) 
n.flatMap (e => f(e._1, e._2))
Run Code Online (Sandbox Code Playgroud)

Tom*_*icz 10

map()改为使用:

n.map (e => f(e._1, e._2))
Run Code Online (Sandbox Code Playgroud)

flatMap()假设您返回的是值集合而不是单个元素.因此这些将起作用:

n.flatMap (e => List(f(e._1, e._2))
n.flatMap (e => List(f(e._1, e._2), f(e._1 * 10, e._2)))
Run Code Online (Sandbox Code Playgroud)

第二个例子很有趣.对于每个[key,value]对,我们返回两对然后合并的结果,结果是:

Map(1 -> a, 10 -> a, 4 -> a, 40 -> a)
Run Code Online (Sandbox Code Playgroud)