Vavr i przekształcenie Try do Validation

Vavr i przekształcenie Try do Validation
JP
  • Rejestracja:prawie 6 lat
  • Ostatnio:około rok
  • Postów:24
0

Witam
Próbuję co nieco zapoznać się Vavrem i nie mogę rozwiązać następującego problemu:
Na wejściu dostaję jakiś obiekt (w tym przypadku niech będzie string) opakowany w Try i chciałbym w zależności od predykatu obsłużyć Success bądź Failure. Z grubsza pseudokod wygląda tak:

Kopiuj
public class Scratch {
  public static Validation<String, String> predicate(String myString) {
    return myString == "rightString" ?
        Validation.valid(myString) :
        Validation.invalid(myString + " is not a right string!");
  }

  public static void main(String[] args) {
    Try.ofSupplier(() -> "someString")
        .toValidation()
         // te linię chciałbym uzupełnić wyliczeniem predykatu i zwróceniem success bądź failure
        .toTry()
        .onSuccess(x -> System.out.println(x))
        .onFailure(x -> System.err.println(x));
  }
}

Żaden z trzech poradników, które udało mi się znaleźć nie traktuje o sytuacji w której chciałbym przekształcić Try na Validation korzystając z metody toValidation() i dokonać sprawdzenia predykatu.
Czy ktoś mógłby wskazać odpowiedni kierunek? Być może zupełnie źle podchodzę do tematu?

baant
  • Rejestracja:ponad 11 lat
  • Ostatnio:3 miesiące
  • Lokalizacja:Wrocław
  • Postów:524
0

Może flatMapa, która zwróci success lub failure w zaleznosci od jakiegos tam ifa. Nie wiem jak działa Validation, bo jego nigdy akurat nie użyłem, ale jeśli działa podobnie jak cała reszta to flatMapa powinna wystarczyć. Przynajmniej jeśli dobrze rozumiem Twój problem xd

edytowany 1x, ostatnio: baant
JP
  • Rejestracja:prawie 6 lat
  • Ostatnio:około rok
  • Postów:24
0

@baant: flatMapa rzucająca exception, owszem rozwiązuje problem, ale mam wrażenie, że istnieje bardziej 'eleganckie' rozwiązanie

baant
  • Rejestracja:ponad 11 lat
  • Ostatnio:3 miesiące
  • Lokalizacja:Wrocław
  • Postów:524
1
Kopiuj
   Try<Integer> seJestInt = Try.success(1)
       .toValidation()
       .flatMap(x -> alePoCoToKomu())
       .toTry();

    private Validation<Throwable, Integer> alePoCoToKomu() {
        if (true) {
            return Validation.invalid(new RuntimeException());
        } else {
            return Validation.valid(1);
        }
    }

Coś takiego? Nie wiem po co, ale brzmi jakby o to Ci chodziło.

Edit: ok widze, że rozszerzyłeś zapytanie xd

edytowany 3x, ostatnio: baant
JP
Dla wyjaśnienia, praktyczny problem akurat polega na tym, że w Try owrapowany jest event po deserializacji i w zależności od tego czy ma co trzeba czy nie, będzie dalej przetwarzany albo wrzucony do deadletter. Dzięki.
S9
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Warszawa
  • Postów:1092
2

A co to za porównywanie stringów przez ==?


JP
Pierwszy z brzegu warunek
S9
Nie zrozumiałeś. Nie robi się tak w Javie !
JP
Spokojnie, zrozumiałem i wiem, że się tak nie robi. Ten warunek był składany ctrl+c/ctrl+v ze zlepków tego co miałem akurat pod kursorem.
JP
  • Rejestracja:prawie 6 lat
  • Ostatnio:około rok
  • Postów:24
0

@baant: to juz progres. W sumie wystarczy. Dzięki.

S9
Ale o equals i porównaniu referencji to Ty poczytaj.

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.