Vavr i przekształcenie Try do Validation

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:

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?

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

0

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

1
   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

2

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

0

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

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