List Scala groupby元素类型

List Scala groupby元素类型,list,scala,collections,types,List,Scala,Collections,Types,我编写了一个textparser,它使用n个解析器(通过对n个样本进行训练生成)解析给定的文本片段,这些解析器包含一个类型列表 列表(Parser1\u对象、Parser2\u对象、Parser1\u对象、Parser3\u对象等) 请注意,每个对象都有参数(假设在本例中,所有对象都有相同的名为param)的参数,其值可能会有所不同。我的目标是减少列表以删除公共解析器(即具有相同参数的对象),以便进一步处理和使用。为了达到同样的效果,我考虑对相同类型的元素进行分组,然后减少每个分组。但是,我不确

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

列表(Parser1\u对象、Parser2\u对象、Parser1\u对象、Parser3\u对象等)


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

您可以使用
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))

好的,谢谢,uu.getClass完成了这个技巧,但是我无法进一步使用类型信息来处理这些具有模式匹配的组(得到了类型擦除的警告)-我猜ClassTag和TypeTag可以用于相同的目的(需要仔细阅读)。上面的一个小问题是
ClassTag(x.getClass).tpe
正确吗?我没有看到Classtag的tpe值成员@@Ark Oops,我在并行试验
TypeTag
s,
tpe
只对它们正确。修正了答案。谢谢