Учитывая коллекцию, coll: C[A]
и функцию f: A => Option[B]
, в чем идиоматический способе в Scala, чтобы получить первый элемент в coll
, для которого f
определяется без оценки всей коллекции?Найти первый Defined элемент в коллекции в Scala
Вот моя подпись предназначена:
def findFirstDefined[A, B](coll: Traversable[A])(f: A => Option[B]): Option[B]
Наивный подход, как coll.flatMap(f).headOption
бы оценить всю коллекцию. Мы можем сделать coll.view.flatMap(f).headOption
или coll.collectFirst(Function.unlift(f))
, но есть ли что-то еще в стандартной библиотеке или в литературе по функциональному программированию или в скалязе/котах, что позволило бы мне это сделать?
Я бы просто сделать 'coll.find (F (_) isDefined) 'не уверен, есть ли какое-либо довольно функциональное решение. –
'coll.view.flatMap (f) .headOption' не компилируется (монады не объединяются), но что не так с' coll.collectFirst (Function.unlift (f)) '? Кажется хорошим решением для меня. –
@ Łukasz Вам нужно будет дважды называть 'f' для найденного элемента. '.collectFirst (Function.unlift (f))' лучше в этом аспекте. –