过滤各种scala类型

时间:2015-11-28 16:49:39

标签: scala types filter

我正在努力获得一个将采用'类型'作为参数,然后返回该类型的所有匹配项。

val a = List(1 , 2 , true, "Hello")

def f(a: List[Any], b: ???): List[Any] = {
  a.filter(p => p.isInstanceOf[b])
}

f(a,???)

因此f(a,Int)会返回List(1, 2)

2 个答案:

答案 0 :(得分:3)

考虑ClassTag如下,

def f[T: scala.reflect.ClassTag](xs: List[Any]) = xs.collect { case v: T => v  }

因此

f[Int](xs)
res: List[Int] = List(1, 2)

注意ClassTag在编译时元素类型未知的集合中很有用。

答案 1 :(得分:2)

注意:使用已弃用的Manifest。请参阅接受的答案以了解前进的方法。

尝试:

def f [T:Manifest](a: List[Any]): List[T] = a.collect {case x: T => x}

然后你可以这样使用:

val filteredList = f[Int](a)

请记住,List[Any]几乎总是一个坏主意。根据您尝试完成的任务,可能有更好的方法来解决问题。