Zip kilku Eitherow z Vavr

Zip kilku Eitherow z Vavr
EL
  • Rejestracja: dni
  • Ostatnio: dni
0

Zastanawiam się jak zrobić zip 2 (lub więcej) eitherów. Mamy np. takie 2 metody:

Kopiuj
private Either<AppError, String> getSomething() {
...
}

I drugą:

Kopiuj
private Either<AppError, Integer> getSomeId() {
...
}

I wyniki z tych metod chciałbym przekazać do jakiejś innej metody, np.:

Kopiuj
private void foo(String something, Integer id) {
...
}

I zastanawiam się jak to sensownie zrobić. Obie metody po lewej stronie rzucają tą samą klasą błedów. Pomijam rozwiązania typu if(getSomething.isRight()....
Jakieś pomysły?

jarekr000000
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: U krasnoludów - pod górą
  • Postów: 4712
2

flatMap i Tuple

KamilAdam
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Silesia/Marki
  • Postów: 5549
0

Gdyby to była Scala (i chciałbyś przerwać przetwarzanie na pierwszy błędzie) to można by to zapisać

Kopiuj
for {
  something <- getSomething()
  someId <- getSomeId()
} yield foo(something, someId)

Niestety Java nie ma powyższej konstrukcji więc trzeba to pisać na flatMapach (jest to zapis równoważny, ale mniej czytelny)

Kopiuj
  getSomething().flatMap(something -> getSomeId().map(someId -> foo(something, someId)));

Jak chcesz błędy z obu metod to robi się to bardziej skompilowane

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.