2014-04-03 27 views
1

假设我有一个列表[T],其中E延伸T.我想获得列表中的所有E。 我必须做一些事情,如:有没有Scala快捷方式“lst过滤isinstanceof地图asinstanceof”?

val l = list filter {_.isInstanceof[E]} map {_.asInstanceOf[E]} 

什么更好的办法来做到这一点?

感谢

+3

这是第一个成语,或抗成语之一,我遇到了我第一次看Scala代码。我想知道为什么它在FAQ中没有得到更多的关注。这也是讽刺之举。 –

回答

10

您正在寻找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()) 
相关问题