将对象添加到键入这些对象成员的地图上

时间:2012-09-12 10:37:02

标签: scala map

我试图找到一种(功能性)方法,将一组对象添加到一个键入这些对象成员的地图中。

我们说我有以下对象(它们是同一类O的所有实例):

o1(a = 1, b = x)
o2(a = 1, b = y)
o3(a = 2, b = z)

我想生成一个Map键入成员a,其中包含以下元组:

(1, List(o1, o2))
(2, List(o3))

现在我可以迭代地执行它,遍历我的初始列表中的每个对象并在我继续时添加它们。但我觉得我错过了一种轻松实现这一目标的功能性方法。我一直在努力使用地图,flatMaps和过滤器来尝试实现这一点,到目前为止还没有结果。

1 个答案:

答案 0 :(得分:3)

groupBy就是你想要的:

scala> val os = List(O(1,2), O(1,3), O(2,4))
os: List[O] = List(O(1,2), O(1,3), O(2,4))

scala> os.groupBy(_.a)
res3: scala.collection.immutable.Map[Int,List[O]] = Map(1 -> List(O(1,2), O(1,3)), 2 -> List(O(2,4)))