map写法 scala语言_映射Map时Scala不匹配

我正在使用

Scala(2.9.1)进行我的第一个有趣的步骤(非hello-world级别),并且我试图理解一个非常无法提供的错误消息.

它很像这样:

error: type mismatch;

found : (Int, Array[InputEntry]) => (Int, Double)

required: (Int, Array[InputEntry]) => ?

entries.groupBy(grouper).map((k: Int, ies: Array[InputEntry]) => (k, doMyStuff(ies)))

正如您可以猜测,此片段中的进程应该是某些处理继续进行的,并且它实际上是一个定义良好的函数,具有签名Array [InputEntry] =>双.

相反,Grouper的签名是Array [InputEntry] =>诠释.

我试图提取一个函数并替换lambda但它没用,而且我试图理解错误中的问号…

有任何想法吗?

编辑:我应该澄清一下,InputEntry是我定义的一个类,但是为了这个例子,在我看来它似乎并不相关.

这看起来像问题:

.map((k: Int, ies: Array[InputEntry]) => (k, doMyStuff(ies)))

您需要使用case语句来取消应用params并将它们分配给局部变量.您还需要使用{}而不是(),因为它现在是一个匿名函数.

entries.groupBy(grouper).map{case (k, ies) => (k, doMyStuff(ies))}

这是一个更简单的例子.

scala> val x = List(("a",1),("b",2))

x: List[(java.lang.String, Int)] = List((a,1), (b,2))

scala> x.map{ case (str, num) => num }

res5: List[Int] = List(1, 2)

如果您不想使用case语句,则必须将元组保留为单个变量.

scala> x.map(tuple => tuple._2)

res6: List[Int] = List(1, 2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值