如何解决使用 Vavr 链接多个 Try 结果的简洁方法
在我的项目中,我经常有一个模式,其中我链接多个可能成功也可能不成功的方法。
我很难找到使用 Vavr 实现它的最干净的方法。
除了这两个,还有别的办法吗?
最好是不需要我创建不必要的 lambdas 的东西,我什至不使用传递的变量。
// First way to do it: use flatMap to chain it
public Try<String> mainMethod(String someParam) {
return firstOperation()
.flatMap(v -> secondOperation(someParam))
.flatMap(v -> thirdOperation(someParam));
}
// Second way to do it: pattern matching
public Try<String> otherMainMethod(String someParam) {
Try<String> firstResult = firstOperation();
return Match(firstResult)
.of(
Case(
$Success($()),() -> {
Try<String> secondResult = secondOperation(someParam);
return Match(secondResult)
.of(
Case($Success($()),thirdOperation(someParam)),Case($Failure($()),secondResult));
}),firstResult));
}
private Try<String> firstOperation() {
return Try.of(
() -> {
// do something
});
}
private Try<String> secondOperation(String someParam) {
return Try.of(
() -> {
// Try something
});
}
private Try<String> thirdOperation(String someParam) {
return Try.of(
() -> {
// Try something
});
}
解决方法
一个优雅的解决方案是使用 vavr 的 for comprehension:
public Try<String> yetAnotherMainMethod(String someParam) {
return API.For(firstOperation(),secondOperation(someParam),thirdOperation(someParam)).yield((s,s2,s3) -> s.concat(s2).concat(s3));
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。