Набор Scala вводит для фильтра

Предположите, что у Вас есть Список (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
     | }
20
задан Eugene Yokota 15 December 2010 в 19:28
поделиться

2 ответа

Scala 2.9:

scala> List(1, "1") collect {
     |   case x: Int => x
     | }
res0: List[Int] = List(1)
24
ответ дан 30 November 2019 в 00:31
поделиться

Что касается вашего измененного вопроса, если вы просто используете 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)
1
ответ дан 30 November 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: