rom*_*oll 2 functional-programming scala
我有许多返回Option
值的函数,就像这样
case class A()
case class B()
case class C()
def optionA(): Option[A] = None
def optionB(): Option[B] = Some(B())
def optionC(): Option[C] = Some(C())
Run Code Online (Sandbox Code Playgroud)
我想要做的是,我想按顺序运行这些函数,但只有在其中一个函数返回Option
带有值(a Some
)的函数之前.然后我希望返回该值,而不运行其余的函数.
这是我目前的实施
val res:Option[Any] = Stream(
() => optionA(),
() => optionB(),
() => optionC()
) .map(f => f())
.filter(opt => opt.isDefined)
.head
Run Code Online (Sandbox Code Playgroud)
对于上述功能的实现,适用optionA
和optionB
,给了我一个Some(B())
,而且也从未运行optionC
,这是我想要的.
但我想知道是否有更好/简单/替代的实施.
有点像val findFirst = optionA compose optionB compose optionC
?
optionA().orElse(optionB()).orElse(optionC())
Run Code Online (Sandbox Code Playgroud)
orElse
如果this
定义,将不会评估其参数.
或者,如果您已经在集合/流中有选项,那么您可能会这样做
options.find(_.isDefined).flatten
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1483 次 |
最近记录: |