val someCollection: List[A] = _
def expensiveComputation(a: A): Option[B] = ???
//Не эффективно
val result1: Option[B] = someCollection.map(expensiveComputation).find(_.isDefined).flatten
//Не функционально
def result2: Option[B] = {
for (a <- someCollection) {
val b = expensiveComputation(a)
if (b.isDefined) {
return b
}
}
None
}
collectFirst или руками явную рекурсию с ранним выходом
Помимо упомянутого Сергеем наиболее подходящего здесь collectFirst можно в первом варианте написать someCollection.iterator или someCollection.view
Обсуждают сегодня