0

我正在应用flatMap一个 scala 数组并从中创建另一个数组:

val x = sc.parallelize(Array(1,2,3,4,5,6,7))
val y = x.flatMap(n => Array(n,n*100,42))
println(y.collect().mkString(","))
1,100,42,2,200,42,3,300,42,4,400,42,5,500,42,6,600,42,7,700,42

但我试图在我以下列方式placeholder "_"创建的代码的第二行中使用:y

scala> val y = x.flatMap(Array(_,_*100,42))
<console>:26: error: wrong number of parameters; expected = 1
       val y = x.flatMap(Array(_,_*100,42))
                              ^  

这是行不通的。如果我想使用占位符,有人可以解释在这种情况下该怎么做吗?

4

2 回答 2

1

在 scala 中,lambda 中占位符的数量表示 lambda 参数的基数。

所以最后一行扩展为

val y = x.flatMap((x1, x2) => Array(x1, x2*100, 42))

长话短说,您不能使用占位符来两次引用同一元素。

在这种情况下,您必须使用命名参数。

val y = x.flatMap(x => Array(x, x*100, 42))
于 2015-08-17T17:59:48.273 回答
0

每个参数只能使用 _ 占位符一次。(在您的情况下, flatMap 方法采用单个参数,但您是在说 - 嘿编译器,期望两个参数不起作用)

val y = x.flatMap(i => Array(i._1, i._2*100,42))

应该做的伎俩。

val y = x.flatMap { case (i1, i2) => Array(i1, i2*100,42) }

也应该工作(并且可能更具可读性)

于 2015-08-17T18:01:06.247 回答