Scala groupby元素类型

时间:2015-09-03 07:07:46

标签: list scala collections types

我编写了一个textparser,它使用n个解析器(通过n个样本训练生成)解析给定的文本片段,其中包含类型列表

List(Parser1_Object, Parser2_Object, Parser1_Object, Parser3_Object,....)

请注意,每个对象都有参数(在这种情况下,所有这些参数都具有名为param的相同参数),其值可能会有所不同。我的目标是减少列表以删除常见的解析器(即具有相同参数的对象)以供进一步处理和使用。为了达到同样的目的,我考虑将相同类型的元素分组,然后努力减少这些组中的每一个。但是我不确定如何groupBy类型。任何建议/指针都会有所帮助(或者如果有更好的功能方法来解决问题)。

1 个答案:

答案 0 :(得分:2)

您可以使用getClass按运行时类型对对象进行分组:

scala> val l = List(1, 2, "1", "2", 2.0, 3.0)
l: List[Any] = List(1, 2, 1, 2, 2.0, 3.0)

scala> l.groupBy(_.getClass)
res0: scala.collection.immutable.Map[Class[_],List[Any]] = 
   Map(class java.lang.String -> List(1, 2), 
       class java.lang.Double -> List(2.0, 3.0), 
       class java.lang.Integer -> List(1, 2))

您可能还想将其打包到scala.reflect.ClassTag,例如l.groupBy(x => ClassTag(x.getClass))