의 컬렉션의 첫 번째 정의 항목, f
전체 수집을 평가하지 않고 정의 된 coll
의 첫 번째 항목을 얻을 스칼라의 관용적 방법은 무엇 찾기?모음, <code>coll: C[A]</code> 및 기능 <code>f: A => Option[B]</code>을 감안할 때 스칼라
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에 뭔가 다른 것이 있습니다.
다음 IsDefined)'꽤 기능적인 해결책이 있는지 확실하지 않습니다. –
'coll.view.flatMap (f) .headOption'은 컴파일되지 않습니다 (모나드는 결합하지 않습니다). 그러나'coll.collectFirst (Function.unlift (f))'의 문제점은 무엇입니까? 나에게 좋은 해결책 인 것 같아. –
@ Łukasz 발견 된 요소에 대해'f'를 두 번 호출해야합니다. '.collectFirst (Function.unlift (f))'는이 측면에서 더 좋습니다. –