在 Scala 上合并可变列表中的对象

Merge objects in mutable list on Scala

我最近开始研究 Scala 代码,并试图了解如何解决问题。

我有一个可变的对象列表,这些对象有一个 id: Stringvalues: List[Int]。我获取数据的方式,不止一个对象可以有相同的 id。我正在尝试合并列表中的项目,因此,例如,如果我有 3 个 ID 为 123 的对象和任何值,我最终只会得到一个具有 ID 的对象,以及 3 个组合的值。

我可以通过 java 方式、迭代等方式来做到这一点,但我想知道是否有更简单的特定于 Scala 的方式来解决这个问题?

首先要做的是避免使用可变数据,并考虑将一个不可变对象转换为另一个。因此,与其改变一个集合的内容,不如考虑从旧集合创建一个新集合。

完成后实际上非常简单,因为这是 Scala 库直接支持的事情。

case class Data(id: String, values: List[Int])

val list: List[Data] = ???

val result: Map[String, List[Int]] =
   list.groupMapReduce(_.id)(_.values)(_ ++ _)

groupMapReduce 调用分为三个部分:

第一部分按 id 字段对数据进行分组,并将其作为键。这给出了 Map[String, List[Data]]

第二部分提取 values 字段并将其作为数据,因此现在的结果是 Map[String, List[List[Int]]]

第三部分将所有 values 字段组合成一个列表,给出最终结果 Map[String, List[Int]]