我有几个Vavr Either,我想调用一个函数,其中Right
每个 Either 的值。例如:
Either<MyError, String> either1 = ..
Either<MyError, String> either2 = ..
Either<MyError, String> either3 = ..
Either<MyError, String>> methodRequiringAllInputs(String, String, String) {
..
}
我当然可以做这样的事情:
either1.flatMap { value1 ->
either2.flatMap { value2 ->
either3.flatMap { value3 ->
methodRequiringAllInputs(value1, value2, value3);
}
}
}
但这非常难看。在其他语言中,您可以使用 do-notation 或 for comprehension 之类的东西来展平结构。我知道 Vavr 有一个Validation的概念,它是一个应用函子,它允许你做:
Validation<MyError, String> validation1 = ..
Validation<MyError, String> validation2 = ..
Validation<MyError, String> validation3 = ..
Validation.combine(validation1, validation2, validation3)
.ap((validationValue1,validationValue2,validationValue3) -> .. );
这要好得多。
我的问题是,Vavr 中是否存在类似的东西来避免嵌套flatMap
结构?请注意,我不想将Either
's 转换为Validation
's。