Scala groupby 元素类型

Ark*_*Ark 2 collections types scala list

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

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

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

dk1*_*k14 5

您可以只使用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))
Run Code Online (Sandbox Code Playgroud)

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