0

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

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

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

4

1 回答 1

3

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

一旦你这样做了,它实际上非常简单,因为这是 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]]

于 2022-02-10T09:26:44.163 回答