Opa*_*pal 8 java functional-programming optional java-8 vavr
我有一个方法String作为输入,也应该返回一个String.
以下ASCII艺术介绍了逻辑流程:
Option<A> optA = finder.findA(input);
optA
/\
isEmpty() / \ isDefined()
/ \
"ERR_1" Option<B> optB = finder.findB(optA.get().bid);
/ \
isEmpty() / \ isDefined()
/ \
"ERR_2" opt2.get().id
Run Code Online (Sandbox Code Playgroud)
基本上给定input我正在寻找A包裹在一个包裹的对象Option.然后是A现在我正在寻找B- 包裹在一个Option,否则返回ERR_1.然后如果B存在则返回它的id,否则返回ERR_2.
我想知道如何使用选项(或模式匹配可能?)以一种简洁的方式(没有任何ifology)实现它 - 可能是单行.
有人可以建议吗?
可以在这里找到试用的源代码.
看起来您有3个可能的退出点:
你可以通过使用Javaslang来实现这一点:
optA
.map(a -> finder.findB(a.bid)
.map(b -> b.bid)
.getOrElse("ERR_2"))
.getOrElse("ERR_1");
Run Code Online (Sandbox Code Playgroud)
如果optA是空的,我们会直接跳到orElse("ERR_1")
如果optA不为空,我们使用存储在里面的值来获取值b.bid或"ERR_2"在optB空虚的情况下.
此外,在纯Java 8中,它看起来像这样:
optA
.map(a -> finder.findB(a.bid)
.map(b -> b.bid)
.orElse("ERR_2"))
.orElse("ERR_1");
Run Code Online (Sandbox Code Playgroud)