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
返回任何 Some
在map
列表中l
.
Dan*_*ral 12
怎么样:
l.toStream flatMap (myfun andThen (_.toList)) headOption
Run Code Online (Sandbox Code Playgroud)
Stream是懒惰的,因此它不会提前映射所有内容,但它也不会重新映射.相反,扁平化的东西,转换Option
到List
使flatMap
可以使用.