给定一个集合coll: C[A]
和一个函数,Scala 中的惯用方式是在不评估整个集合的情况下获取定义的f: A => Option[B]
第一项?coll
f
这是我的预期签名:
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))
在标准库、函数式编程文献或 scalaz/cats 中还有其他东西可以让我这样做吗?