для первого a из списка, для которого f(a).isDefined? Идиоматично и без двойного вызова f.
Вот неидиоматичное, но эффективное решение
def locate[A, B](seq: Seq[A])(f: A => Option[B]): Option[B] = {
val it = seq.iterator
while (it.hasNext) {
f(it.next()) match {
case Some(value) => return Some(value)
case None =>
}
}
None
}
можно foldLeftM свернуть и брейкнуть свертку на первом валидном опшоне оно ленивое всм если у тебя стримы тож работать будет
В OptionT лифтить? имхо перебор.
да не, зачем, тупня какаянить типа https://scastie.scala-lang.org/dssEBo5sRbSBwZN3zOwVcQ
Есть collectFirstSome в Foldable
Обсуждают сегодня