Моя первая попытка будет:
(1 to 10).view map {k => (k, f(k))} find {_._2.isDefined}
Использование view
позволяет избежать создания промежуточного map
. Или еще лучше с сопоставлением с образцом и частичной функцией:
(1 to 10).view map {k => (k, f(k))} collectFirst {case (k, Some(v)) => (k, v)}
Возвращает Option[(Int, java.lang.String)]
(None
, если не найдено ни одного элемента, удовлетворяющего f
).
Вы также можете поэкспериментировать с .zipWithIndex
.