gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:18:14 26 4
gpt4 key购买 nike

在我的项目中,我经常有一个模式,我将多个可能成功也可能不成功的方法链接起来。
我很难找到使用 Vavr 实现它的最干净的方法。除了这两个还有其他方法吗?
最好是不需要我创建不必要的 lambda 的东西,我什至不使用传递的变量。

   // 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));
}),
Case($Failure($()), 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));
}

关于java - 使用 Vavr 链接多个 Try 结果的简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66857195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com