2014-01-30 5 views
0

첫 번째 성공적인 변환이 나에게 내가 원하는 항목을 반환하도록 항목을 변환하는 동안 목록에서 항목을 찾으려고합니다. 그래서 나는 다음과 같은이 말 : 스칼라 목록에서 항목 찾기 및 변환

def trans(a: A): Option[B] = {...} 

val list: List[A] = List(x, y, z) 

val b: B = list.findAndConvert(a => crit(a)) 

그래서 위의 내 findAndConvert의 (b)의 최초의 호출에 대한 일부 반환 트랜스 (A) 그 그렇지 않으면 일부 (B) 또는 None을 반환하지 않습니다. 어떻게 findAndConvert 메소드와 같은 것을 얻을 수 있습니까? 진정한 수익을 찾을 때까지 트랜스 만보기에 매핑 할 수 있도록

감사 데

답변

2
list.view.map(trans _).find(_.isDefined) 

전망, 게으르게 평가된다.

0

여기에 crit이 정의되어 있지 않으며 사용자의 예로는 trans이 호출되지 않습니다. 그래서 나는 두 경우 모두 trans을 의미한다고 가정합니까?

스칼라 컬렉션은 매우 강력합니다. 적절한 기능을 찾으면 API 문서를 확인하십시오. 예를 들어 find()이 좋습니다.

def trans(a: String):Option[Int] = { 
    val r = Integer.valueOf(a); 
    if (r > 3) Some(r) 
    else None 
} 

val listA = List("1", "3", "2") 
val listB = List("1", "5", "2") 

listA.find(!trans(_).isEmpty) // => Option[java.lang.String] = None 
listB.find(!trans(_).isEmpty) // => Option[java.lang.String] = Some(5) 
관련 문제