Vavr i odpowiednik Either::flatMapLeft

0

Cześć próbuję napisać kod z użyciem Either z Vavr i właśnie odkryłem że potrzebowałbym połączenia metod flatMap i mapLeft czyli flatMapLeft XD

Wie ktoś może czy jest jakiś odpowiednik tego w Either o jakiejś zaskakującej nazwie?
Na razie jedyne co wymyśliłem to either.swap().flatMap().swap() albo trzymać błędy w Right a poprawne wartości w Left :D

Use case jest taki że strzelam do serwisu z różnymi parametrami tak długo aż dostanę odpowiedź poprawną, ale błędy mają się kumulować i być zwrócona jeśli nie uda się uzyskać poprawnej odpowiedzi (dlatego mam łańcuch Either).

0

Chyba czegoś nie rozumiem. Skąd ten drugi either? Skoro uderzasz wiele razy do endponintu to masz jako wynik List<Either<L,R>> i nie bardzo rozumiem gdzie jest problem.

0

Zapomniałem o takim szczególe że uderzam tak długo aż dostanę poprawny wynik i wtedy przerywam :D Czyli kolejne wywołanie zależy od poprzedniego :)

1

Tak naprawde to napisałeś ten szczegół.
To IMO masz de fakto odwrócony Either - wiec jakby nie ma problemu. Trzymasz poprawny wynik po lewej stronie. Błędy kumulujesz po prawej.
Nietypowe, ale poprawne.

0

Coś trochę nie halo. Raczej użył tam jakiegoś akumulatora z lewej i na koniec zmapował go na konkretny błąd.

0

List<Either<L,R>> i następnie mapowanie na Either<List<L>, R> przy założeniu że R musi być tylko i wyłącznie jeden - ja bym pewnie tak podszedł. Tu w zasadzie przy mapowaniu interesuje Cię tylko ostatni element listy - jeżeli R to zwracasz Either.right(R), jeżeli nie to Either.left(List<L>)
Generalnie jeżeli chodzi o typy, to List<Either<L, R>> powinno się zmapować na Either<List<L>, List<R>>, więc gdzieś będziesz musiał mieć brzydko (no chyba, że ktoś ma na to lepszy sposób to proszę o podzielenie się)

Oczywiście przy trzymaniu się konwencji L - błąd, R - sukces :)

1

Co to konwencji i zasad. Oto mój autorytet:

koleś git

1 użytkowników online, w tym zalogowanych: 0, gości: 1