首先scala返回列表中的某些

我有一个列表l:列表[T1],当前我做以下操作:

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

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

这对我来说似乎有点黑客.我认为可能存在一些理解或类似的东西,这样做会浪费更多或更聪明.
例如:如果myfun在列表l的地图中返回任何一个,我不需要任何后续的答案.

最佳答案
怎么样:

l.toStream flatMap (myfun andThen (_.toList)) headOption

流是懒惰的,所以它不会提前映射一切,但它也不会重映射.而不是平铺事物,将Option转换为List,以便可以使用flatMap.

转载注明原文:首先scala返回列表中的某些 - 代码日志