scala groupBy类然后映射结果
我有一个元素列表,希望按类对它们进行分组,然后处理结果scala groupBy类然后映射结果,scala,types,Scala,Types,我有一个元素列表,希望按类对它们进行分组,然后处理结果 trait H case class A(x: Int) extends H case class B(x: Int) extends H val x = List(A(1),B(2),B(3)) val y = x.groupBy(_.getClass) y.map(_ match {case (A, alist) => println("found me some As") case (B, bl
trait H
case class A(x: Int) extends H
case class B(x: Int) extends H
val x = List(A(1),B(2),B(3))
val y = x.groupBy(_.getClass)
y.map(_ match {case (A, alist) => println("found me some As")
case (B, blist) => println("not As")})
不幸的是,这会产生如下错误:
<console>:17: error: pattern type is incompatible with expected type;
found : A.type
required: Class[_ <: Product]
Note: if you intended to match against the class, try `case _: A`
y.map(_ match {case (A, alist) => println("found me some As")
但是感觉应该有更好的方法,使用
groupBy
a
返回的初始Map
,在案例(a,alist)
中指的是a
的伴生对象,其类型为a.type
。这就是你收到错误信息的原因。如果要与类元数据进行匹配,应参考[A]
的类。也没有理由使用match
,因为您已经可以使用map
进行模式匹配了
y.map {
case (c, alist) if(c == classOf[A]) => println("found me some As")
case (c, blist) if(c == classOf[B]) => println("not As")
}
A
在案例(A,alist)
中,A指的是A
的伴生对象,其类型为A.type
。这就是你收到错误信息的原因。如果要与类元数据进行匹配,应参考[A]的类。也没有理由使用match
,因为您已经可以使用map
进行模式匹配了
y.map {
case (c, alist) if(c == classOf[A]) => println("found me some As")
case (c, blist) if(c == classOf[B]) => println("not As")
}