按类型过滤集合的最佳方法是什么? 我希望结果类型是已过滤的类型。 我找到了两种可能的语法,哪种更好?
val list = List(1,"two",3,"four")
//1) using "Typed" helper object
object Typed { def unapply[A](a: A) = Some(a) }
val list1 = for {
Typed(i: Int) <- list
} yield i
//2) using flatMap
val list2 = lo.flatMap {
case i: Int => List(i)
case _ => Nil
}
答案 0 :(得分:5)
使用collect
list.collect {
case a: Int => a
}
答案 1 :(得分:0)
如果您忘记了collect
,使用filter
代替flatMap
仍然应该更短&amp;更快:
val list2 = lo.filter {
case i: Int => true
case _ => false
}.asInstanceOf[List[Int]]
如果我们不假装模式匹配与执行isInstanceOf
有明显不同之处,我们也可以这样做:
val list2 = lo.filter(_.isInstanceOf[Int]).asInstanceOf[List[Int]]
这不是很惯用,但是... pamu的解决方案肯定更优雅。