scala返回第一个列表中的一些

svr*_*ist 14 functional-programming scala list scala-option

我有一个列表l:List[T1],目前我正在做以下事情:

myfun : T1 -> Option[T2]
val x: Option[T2] = l.map{ myfun(l) }.flatten.find(_=>true)
Run Code Online (Sandbox Code Playgroud)

myfun函数返回None或Some,flatten抛弃所有None,并且find返回列表的第一个元素(如果有的话).

这对我来说似乎有些苛刻.我认为可能存在一些理解或类似的东西会减少浪费或更聪明.例如:我不需要如有后续的答案myfun返回任何 Somemap列表中l.

Dan*_*ral 12

怎么样:

l.toStream flatMap (myfun andThen (_.toList)) headOption
Run Code Online (Sandbox Code Playgroud)

Stream是懒惰的,因此它不会提前映射所有内容,但它也不会重新映射.相反,扁平化的东西,转换OptionList使flatMap可以使用.