如何实现回退功能列表
假设我有一个返回的函数列表,Option[Int]我想返回第一个返回的结果Some(…),而不是计算它之后的其余函数。例如:
val list = List(
() => { println("a"); None },
() => { println("b"); Some(1) },
() => { println("c"); Some(2) },
() => { println("d"); None }
)
在这种情况下,结果将是Some(1),并且它只会打印a和b(因为其余的都没有计算)。
我的解决方案是
list.foldLeft(Option.empty[Int]) { (a, b) => a orElse b() }
问题是否有更优雅/简洁的方法,或者一些图书馆?
回答
list.view.flatMap(_()).headOption
a并且b只被调用一次。c并且d永远不会被调用甚至迭代。None如果没有Some()值则返回。
该.view如果将不需要list为类型LazyList。