微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Vavr 链接多个 Try 结果的简洁方法

如何解决使用 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 举报,一经查实,本站将立刻删除。