Class OneOfN.Either<T1,T2>

java.lang.Object
de.xima.fc.common.data.algebraic.OneOfN
de.xima.fc.common.data.algebraic.OneOfN.Either<T1,T2>
Type Parameters:
T1 - Type of the value for the left case.
T2 - Type of the value for the right case.
All Implemented Interfaces:
Serializable
Enclosing class:
OneOfN

public static final class OneOfN.Either<T1,T2> extends OneOfN
Emulates a sum type consisting of 2 cases.
See Also:
  • Method Details

    • isLeft

      public boolean isLeft()
      Returns:
      Whether a value for the left case is present.
    • isRight

      public boolean isRight()
      Returns:
      Whether a value for the right case is present.
    • left

      public T1 left()
      Returns:
      The value of the left case, if a value exists for that case.
      Throws:
      IllegalArgumentException - If the requested case is not present.
    • map

      public <R1,R2> OneOfN.Either<R1,R2> map(Function<? super T1, ? extends R1> left, Function<? super T2, ? extends R2> right)
      Maps this sum type to another sum type by invoking the mapping function for the matching case with the value of this sum type and returning the result.
      Type Parameters:
      R1 - Type of the result returned by the mapping function for the left case.
      R2 - Type of the result returned by the mapping function for the right case.
      Parameters:
      left - Mapping function for the left case.
      right - Mapping function for the right case.
      Returns:
      The sum type with the value returned by the mapping function for the matching case.
    • match

      public <R> R match(Function<? super T1, ? extends R> left, Function<? super T2, ? extends R> right)
      Performs a case match on this sum type by invoking the mapping function for the matching case with the value of this sum type and returning the result.
      Type Parameters:
      R - Type of the result returned by each mapping function.
      Parameters:
      left - Mapping function for the left case.
      right - Mapping function for the right case.
      Returns:
      The value returned by the mapping function for the matching case.
    • match

      public <R> R match(OneOfN.EitherMatcher<? extends R, ? super T1, ? super T2> matcher)
      Performs a case match on this sum type by invoking the mapping function for the matching case with the value of this sum type and returning the result.
      Type Parameters:
      R - Type of the result returned by each mapping function.
      Parameters:
      matcher - Matcher object for each case.
      Returns:
      The value returned by the mapping function for the matching case.
    • match

      public <R> R match(R defaultValue, OneOfN.EitherMatcher<? extends R, ? super T1, ? super T2> matcher)
      Performs a case match on this sum type by invoking the mapping function for the matching case with the value of this sum type and returning the result.
      Type Parameters:
      R - Type of the result returned by each mapping function.
      Parameters:
      defaultValue - Value returned when the given matcher has no matching case.
      matcher - Matcher object for each case.
      Returns:
      The value returned by the mapping function for the matching case.
    • mergeFirst

      public T2 mergeFirst(Function<? super T1, ? extends T2> combiner)
      Allows for a multi-stage reduce operation of the cases into a single value. Reduces the number of cases to one by mapping the first to the second case via the given mapping function, then unwraps the resulting Just type.
      Parameters:
      combiner - Mapping function that transform the value of the first case into the second case.
      Returns:
      The value of the only remaining case.
    • mergeLast

      public T1 mergeLast(Function<? super T2, ? extends T1> combiner)
      Allows for a multi-stage reduce operation of the cases into a single value. Reduces the number of cases to one by mapping the right to the left case via the given mapping function, then unwraps the resulting Just type.
      Parameters:
      combiner - Mapping function that transform the value of the right case into the left case.
      Returns:
      A sum type with one less case.
    • right

      public T2 right()
      Returns:
      The value of the right case, if a value exists for that case.
      Throws:
      IllegalArgumentException - If the requested case is not present.
    • selectLeft

      public Optional<T1> selectLeft()
      Returns:
      The value of the left case, if a value exists for that case.
    • selectRight

      public Optional<T2> selectRight()
      Returns:
      The value of the right case, if a value exists for that case.
    • tryMatch

      public <R> R tryMatch(IThrowingFunction<? super T1, ? extends R> left, IThrowingFunction<? super T2, ? extends R> right) throws Exception
      Performs a case match on this sum type by invoking the mapping function for the matching case with the value of this sum type and returning the result.
      Type Parameters:
      R - Type of the result returned by each mapping function.
      Parameters:
      left - Mapping function for the left case.
      right - Mapping function for the right case.
      Returns:
      The value returned by the mapping function for the matching case.
      Throws:
      Exception - If the mapping function for the matching case throws an exception.
    • firstNonNull

      public static <T1,T2> OneOfN.Either<T1,T2> firstNonNull(T1 t1, T2 t2)
      Returns the first non-null value of the two given values as an Either type.
      Type Parameters:
      T1 - Type of the value for the left case.
      T2 - Type of the value for the right case.
      Parameters:
      t1 - The first value
      t2 - The second value
      Returns:
      The first non-null value, or null if both are null.
    • left

      public static <T1,T2> OneOfN.Either<T1,T2> left(T1 left)
      Type Parameters:
      T1 - Type of the value for the left case.
      T2 - Type of the value for the right case.
      Parameters:
      left - The value for the left case.
      Returns:
      A new sum type with the value for the left case.
    • right

      public static <T1,T2> OneOfN.Either<T1,T2> right(T2 right)
      Type Parameters:
      T1 - Type of the value for the left case.
      T2 - Type of the value for the right case.
      Parameters:
      right - The value for the right case.
      Returns:
      A new sum type with the value for the right case.