У меня есть такой код:
return validators
.stream()
.flatMap(v -> v.validate(scoreRequest).stream())
.collect(toList());
Каждый валидатор возвращает List<String> ошибок, если список пуст, это означает, что запрос действителен.
Теперь я хочу представить vavr.Validator. Новый тип возврата каждого validator.validate теперь Validation<List<String>,ScoreRequest>
Как я могу объединить вывод каждого валидатора, используя потоки, как раньше?
Я просто хочу объединить все проверки, выполненные каждым валидатором. На выходе комбайна должно быть: Validation<List<String>,ScoreRequest>
Вы говорите, что метод validate() каждый возвращает объект Validation. Как вы планируете их объединить? Как из списка ScoreRequest перейти в один?!
Я думал, что Valivation.combine сделает именно это. Объедините List<String> ошибок или верните scoreRequest, если запрос действителен.




Вы можете использовать последовательность именно для этого.
Итак, если ваш validators является List<Validation<List<String>, ScoreRequest>>, применение к нему этой функции вернет Validation<Seq<String>, Seq<ScoreRequest>>, который выглядит точно так, как вы хотите. Я позволю вам разобраться с тонкостями обратного преобразования Seq в любую структуру, которую вы хотите.
Я думаю, вы должны уточнить свои требования. Как мы могли сказать вам, что ты собирается делать с этой измененной подписью?! Вы изменили подпись этого метода, чтобы вернуть объект проверки. Теперь ты должен определить, как вы хотите разумно обработать это?!