Zip kilku Eitherow z Vavr

Zip kilku Eitherow z Vavr
EL
  • Rejestracja:około 13 lat
  • Ostatnio:4 miesiące
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?

edytowany 1x, ostatnio: eL
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4708
2

flatMap i Tuple


jeden i pół terabajta powinno wystarczyć każdemu
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Silesia/Marki
  • Postów:5505
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


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
edytowany 1x, ostatnio: KamilAdam

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.