【发布时间】:2020-01-09 09:39:38
【问题描述】:
我有几个VavrEither,我想为每个Either 调用一个具有Right 值的函数。例如:
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 转换为Validation。
【问题讨论】:
标签: java functional-programming vavr