2013-08-29 1 views
1

Как сделать это в Scala образом: возвращает первый элемент в Some[String] из Option[Seq[String]], если это Some[Seq[String]] и имеет минимум одну строку, в противном случае вернуться NoneКак сделать это в Scala образом: получить первый элемент из опции [Seq [String]]

+0

В вашем приложении какая разница между 'None' и пустым' Seq() '? Если их нет, подумайте о том, чтобы полностью отбросить «Вариант». – cheeken

ответ

7

headOption делает то, что вы хотите на Seq и flatMap на Option может сделать все остальное:

def first[A](maybe: Option[Seq[A]]): Option[A] = maybe.flatMap(_.headOption) 

Это, по существу, такой же, как в следующем, но более кратким и идиоматических:

def first[A](maybe: Option[Seq[A]]): Option[A] = maybe match { 
    case Some(xs) => xs.headOption 
    case None => None 
} 

Обратите внимание, что обе версии являются немного более общий характер, чем то, что вы просили, но вы можете оставить параметр типа и заменить A с String, если вы хотите, чтобы работать со строками.

+0

Прохладный. Не знал headOption. – NSF

Смежные вопросы