1
假设我有一个列表[T],其中E延伸T.我想获得列表中的所有E。 我必须做一些事情,如:有没有Scala快捷方式“lst过滤isinstanceof地图asinstanceof”?
val l = list filter {_.isInstanceof[E]} map {_.asInstanceOf[E]}
什么更好的办法来做到这一点?
感谢
假设我有一个列表[T],其中E延伸T.我想获得列表中的所有E。 我必须做一些事情,如:有没有Scala快捷方式“lst过滤isinstanceof地图asinstanceof”?
val l = list filter {_.isInstanceof[E]} map {_.asInstanceOf[E]}
什么更好的办法来做到这一点?
感谢
您正在寻找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())
这是第一个成语,或抗成语之一,我遇到了我第一次看Scala代码。我想知道为什么它在FAQ中没有得到更多的关注。这也是讽刺之举。 –