是否存在"lst filter isinstanceof map asinstanceof"的Scala快捷方式?

huo*_*ter 2 scala

假设我有一个List [T],其中E扩展为T.我想得到列表中的所有E.我必须做的事情如下:

    val l = list filter {_.isInstanceof[E]} map {_.asInstanceOf[E]}
Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?

谢谢

Ion*_*tan 11

您正在寻找collect:

scala> trait Quux
defined trait Quux

scala> case class Bar() extends Quux
defined class Bar

scala> case class Baz() extends Quux
defined class Baz

scala> val l = List(Bar(), Baz())
l: List[Product with Serializable with Quux] = List(Bar(), Baz())

scala> l.collect { case bar:Bar => bar }
res1: List[Bar] = List(Bar())
Run Code Online (Sandbox Code Playgroud)