Как насчет использования сбора?
// Returns List(66)
List(1, 2, 3) collect { case i if (i * 33 % 2 == 0) => i * 33 }
Однако это вернет все совпадений, а не только первый.
Лучший ответ был бы на основена Scala 2.9:
// Returns Some(66)
List(1, 2, 3) collectFirst { case i if (i * 33 % 2 == 0) => i * 33 }
Решение, предложенное в комментариях, добавить head
, чтобы получить версию Scala 2.8, что, боюсь, не очень эффективно.Возможно, в этом случае я бы придерживался вашего собственного кода.В любом случае, чтобы убедиться, что он возвращает опцию, вам не следует звонить head
, но headOption
.
// Returns Some(66)
List(1, 2, 3) collect { case i if (i * 33 % 2 == 0) => i * 33 } headOption