在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]]

相关内容

  • 没有找到相关文章

最新更新