scala list.map返回空列表

时间:2016-08-27 22:17:54

标签: scala foreach functional-programming

我正在尝试对具有相同字符的对的值求和,但在打印时,我得到List((),())

这是我的代码

var lstA = List(("a",1),("b",2))
var lstB = List(("a",3), ("b",4))

val k = lstA.map(a => lstB.foreach(b => {
  if(b._1 == a._1) (a._1, a._2+b._2) else a
}))

println(k)

当然有更好的方法可以做到这一点,但我只是想知道为什么这不起作用。 在调试和评估行if(b._1 == a._1) (a._1, a._2+b._2) else a时,我按预期获得对的值,但是当打印列表k为空时

1 个答案:

答案 0 :(得分:2)

简短且不完全准确的答案是因为foreach没有返回任何内容。实际上,它 会返回一些东西。这是signature

def foreach[U](f: (A) ⇒ U): Unit

它返回Unit类型,用作该函数具有副作用的信号。从文档中,f参数是:

  

将其副作用应用于每个元素的函数。该   函数f的结果被丢弃。

因此预计该功能会产生副作用。这可能类似于println