我编写了一个textparser,它使用n个解析器(通过n个样本训练生成)解析给定的文本片段,其中包含类型列表
List(Parser1_Object, Parser2_Object, Parser1_Object, Parser3_Object,....)
请注意,每个对象都有参数(在这种情况下,所有这些参数都具有名为param
的相同参数),其值可能会有所不同。我的目标是减少列表以删除常见的解析器(即具有相同参数的对象)以供进一步处理和使用。为了达到同样的目的,我考虑将相同类型的元素分组,然后努力减少这些组中的每一个。但是我不确定如何groupBy
类型。任何建议/指针都会有所帮助(或者如果有更好的功能方法来解决问题)。
答案 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))
。