У меня есть пара Vavr Либо , и я хочу вызвать функцию со значением 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 или для понимания, чтобы выровнять структуру. Я знаю, что в Vavr есть концепция Validation , которая является аппликативным функтором, который позволяет вам:
Validation<MyError, String> validation1 = ..
Validation<MyError, String> validation2 = ..
Validation<MyError, String> validation3 = ..
Validation.combine(validation1, validation2, validation3)
.ap((validationValue1,validationValue2,validationValue3) -> .. );
, что намного приятнее.
Мой вопрос: существует ли нечто подобное в Vavr для Either's, чтобы избежать вложенной структуры flatMap
? Обратите внимание, что я не хочу преобразовать Either
в Validation
.