Предположите, что у Вас есть Список (1, "1") он вводится Список [Любой], который, конечно, корректен и ожидается. Теперь, если я отображаю список как это
scala> List(1, "1") map {
| case x: Int => x
| case y: String => y.toInt
| }
получающийся тип является Списком [Интервал], который ожидается также. Мой вопрос состоит в том, если существует эквивалент для отображения для фильтра, потому что следующий пример приведет к Списку [Любой]. Действительно ли это возможно? Я предполагаю, что это могло быть решено во время компиляции и возможно не время выполнения?
scala> List(1, "1") filter {
| case x: Int => true
| case _ => false
| }
Scala 2.9:
scala> List(1, "1") collect {
| case x: Int => x
| }
res0: List[Int] = List(1)
Что касается вашего измененного вопроса, если вы просто используете guard в случае, включающем вашу partialFunction, вы получаете фильтрацию:
scala> val l1 = List(1, 2, "three", 4, 5, true, 6)
l1: List[Any] = List(1, 2, three, 4, 5, true, 6)
scala> l1.partialMap { case i: Int if i % 2 == 0 => i }
res0: List[Int] = List(2, 4, 6)