Vavr i odpowiednik Either::flatMapLeft

Vavr i odpowiednik Either::flatMapLeft
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Silesia/Marki
  • Postów:5505
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).


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 3x, ostatnio: KamilAdam
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
0

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

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 :)


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
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
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.


jeden i pół terabajta powinno wystarczyć każdemu
W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 3 godziny
  • Postów:3595
0

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

PU
  • Rejestracja:ponad 9 lat
  • Ostatnio:5 miesięcy
  • Postów:59
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 :)

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

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

koleś git

  • git.jpg (5 KB) - ściągnięć: 12

jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000

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.