我正在努力获得一个将采用'类型'作为参数,然后返回该类型的所有匹配项。
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)
答案 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]
几乎总是一个坏主意。根据您尝试完成的任务,可能有更好的方法来解决问题。