Я новичок в Scala и пытаюсь найти лучший способ фильтровать & Карта коллекции. Вот пример игрушки, чтобы объяснить мою проблему.Scala: Лучший способ фильтровать и отображать на одной итерации
Подход 1: Это очень плохо, так как я повторяю в списке дважды и вычисляя одно и то же значение на каждой итерации.
val N = 5
val nums = 0 until 10
val sqNumsLargerThanN = nums filter { x: Int => (x * x) > N } map { x: Int => (x * x).toString }
подход 2: Это немного лучше, но мне еще нужно вычислить (x * x)
дважды.
val N = 5
val nums = 0 until 10
val sqNumsLargerThanN = nums collect { case x: Int if (x * x) > N => (x * x).toString }
Итак, можно вычислить это без перебора коллекции дважды и не повторять одни и те же расчеты?
Почему кто-то вниз голосованиями этот ответ? 'collect' кажется очень идиоматичным способом сделать это. –
Разве это не то же самое, что мой «подход 2»? –
Да, это то же самое, что и Подход № 2 выше, и, исходя из определения _collect_, это кажется мне совершенно разумным; он говорит точно, что он делает. Это не означает, что другие подходы, описанные выше, лучше или хуже. – Nirmalya