将信息从一个列表合并到另一个Scala

将信息从一个列表合并到另一个Scala,scala,functional-programming,Scala,Functional Programming,我有两份清单: val generalInfo = List[GeneralInfo] val countInfo = List[CountInfo] case class GeneralInfo(id: String, source: String, languages: Array[String], var count: BigDecimal) case class CountInfo(id: String, count: BigDecimal) 每个GeneralInfo对象都用cou

我有两份清单:

val generalInfo = List[GeneralInfo]
val countInfo = List[CountInfo]

case class GeneralInfo(id: String, source: String, languages: Array[String], var count: BigDecimal)
case class CountInfo(id: String, count: BigDecimal)
每个
GeneralInfo
对象都用
count=0
初始化

我需要在
GeneralInfo
对象中填写count变量,当它们的id相同时,使用
CountInfo
对象中的计数值。(并非
GeneralInfo
列表中的所有id都在
CountInfo
列表中)


我对Scala很陌生,有没有办法不用字典就能优雅地完成它?

如果你知道有一对一的关系,你可以浏览每个
CountInfo
,找到相应的
GeneralInfo
对象,并为
GeneralInfo
设置
count

countInfo.foreach(c => generalInfo.find(_.id == c.id).map(_.count = c.count))
如果一个id可以被多个
GeneralInfo
对象共享,请使用
filter
而不是
find

countInfo.foreach(c =>
  generalInfo.filter(_.id == c.id).foreach(_.count = c.count)
)
您也可以通过另一种方式进行:

generalInfo.foreach(g => countInfo.find(_.id == g.id).map(c => g.count = c.count))

为什么不使用字典?顺便说一句,
var
在case类是非常糟糕的做法时,您可以使用
copy
通过创建新值来修改值。没有一对一。在一般信息中,可以使用不同的源使用相同的id。