У меня есть ряд функций, которые принимают объект Request и возвращают Vavr Either.
Either будет содержать объект Result, если задача завершена, или измененный объект Request, если задача должна быть завершается другой функцией.
Мысль заключалась в том, что я мог бы связать их вместе, сделав что-то вроде этого:
// Note: The Request object parameter is modified by the function
// before being returned in the Either.
Function<Request, Either<Request,Result>> function1;
Function<Request, Either<Request,Result>> function2;
Function<Request, Either<Request,Result>> function3;
Function<Request, Result> terminalFunction;
Result result = function1.apply(request)
.flatMapLeft(function2)
.flatMapLeft(function3)
.fold(terminalFunction, r->r);
Но, видимо, flatMapLeft
- это не вещь, поэтому я просто получаю вложенный Eithers на левая сторона. Любые идеи о том, как я могу достичь этой функции? Я открыт для альтернативных библиотек.
Изменить:
Result result = function1.apply(request)
.fold(function2, Either::right)
.fold(function3, Either::right)
.fold(terminalFunction, r->r);
Похоже, это должно работать, но Intellij выдает эту ошибку во второй строке сгиба:
no instance(s) of type variable(s) exist so that capture of ? extends Object conforms to Request