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



我有两个列表:

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)

每个CCD_ 1对象都用CCD_ 2初始化;

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

我是Scala的新手,有没有什么方法可以在不使用字典的情况下优雅地完成它?

如果您知道存在一对一的关系,您可以遍历每个CountInfo,找到相应的GeneralInfo对象,并为该GeneralInfo0设置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))

Scastie 演示

最新更新