* Conditional * Functional Condition and Value. [[https://oss.sonatype.org/content/repositories/releases/net/kemitix/conditional][file:https://img.shields.io/nexus/r/https/oss.sonatype.org/net.kemitix/conditional.svg?style=for-the-badge]] [[https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22net.kemitix%22%20AND%20a%3A%22conditional%22][file:https://img.shields.io/maven-central/v/net.kemitix/conditional.svg?style=for-the-badge]] [[http://i.jpeek.org/net.kemitix/conditional/index.html][file:http://i.jpeek.org/net.kemitix/conditional/badge.svg]] * Maven #+BEGIN_SRC xml net.kemitix conditional RELEASE #+END_SRC The latest version should be shown above with the nexus and maven-central badges or can be found on [[https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22net.kemitix%22%20AND%20a%3A%22mon%22][Maven Central]]. * Condition The `if ... then` and `if ... then ... else` constructs can't be used in a lambda without being wrapped in a code block. Using `Condition` allows the use of an if-style expression without needing to wrap it in a code block ** if-then #+BEGIN_SRC java if (isTrue()) { doSomething(); } Condition.where(isTrue()) .then(() -> doSomething()); #+END_SRC ** if-then-else #+BEGIN_SRC java if (isTrue()) { doSomething(); } else { doSomethingElse(); } Condition.where(isTrue()) .then(() -> doSomething()) .otherwise(() -> doSomethingElse()); #+END_SRC ** isTrue() / isFalse() / not() #+BEGIN_SRC java final Condition condition = Condition.where(isTrue()); final boolean isTrue = condition.isTrue(); final boolean isFalse = condition.isFalse(); final Condition not = condition.not(); final Condition andCondition1 = condition.and(Condition.where(isAlsoTrue())); final Condition andCondition2 = condition.and(isAlsoTrue()); final Condition orCondition1 = condition.or(Condition.where(isAlsoTrue())); final Condition orCondition2 = condition.or(isAlsoTrue()); #+END_SRC ** flatMap(Function) #+BEGIN_SRC java final Condition condition = Condition.where(isTrue()) .flatMap(b -> Condition.where(b)); #+END_SRC ** if-and-then-else #+BEGIN_SRC java if (isTrue() && isAlsoTrue()) { doSomething(); } else { doSomethingElse(); } Condition.where(isTrue()) .and(() -> isAlsoTrue()) .then(() -> doSomething()) .otherwise(() -> doSomethingElse()); #+END_SRC ** if-or-then-else #+BEGIN_SRC java if (isTrue() || alternativeIsTrue()) { doSomething(); } else { doSomethingElse(); } Condition.where(isTrue()) .or(() -> alternativeIsTrue()) .then(() -> doSomething()) .otherwise(() -> doSomethingElse()); #+END_SRC ** if-then-else-if #+BEGIN_SRC java if (isFalse()) { doSomething(); } else if (isTrue()) { doSomethingElse(); } Condition.where(isFalse()) .then(() -> doSomething()) .otherwise(() -> isTrue()) .then(() -> doSomethingElse()); #+END_SRC ** if-then-if-then #+BEGIN_SRC java if (isTrue()) { doSomething(); if (isAlsoTrue()) { doSomethingElse(); } } Condition.where(isTrue()) .then(() -> doSomething()) .and(() -> isAlsoTrue()) .then(() -> doSomethingElse()); #+END_SRC * Value Values from an if-then-else in a functional-style. Functional, and verbose, alternative to the ternary operator (=?:=). ** if-then-else #+BEGIN_SRC java String result; if (isTrue()) { result = TRUE; } else { result = FALSE; } String result = isTrue() ? TRUE : FALSE; final String result = Value.where(isTrue(), () -> TRUE, () -> FALSE); final String result = Value.where(Condition.where(isTrue), () -> TRUE, () -> FALSE); final Optional result = Value.where(isTrue(), () -> TRUE); final String result = Value.where(isTrue()) .not() .then(() -> FALSE) .otherwise(() -> TRUE); #+END_SRC ** if-and-then-else #+BEGIN_SRC java String result; if (isTrue() && alternativeIsTrue()) { result = TRUE; } else { result = FALSE; } final String result = Value.where(isTrue()) .and(() -> alternativeIsTrue()) .then(() -> TRUE) .otherwise(() -> FALSE); #+END_SRC ** if-or-then-else #+BEGIN_SRC java String result; if (isTrue() || alternativeIsTrue()) { result = TRUE; } else { result = FALSE; } final String result = Value.where(isTrue()) .or(() -> alternativeIsTrue()) .then(() -> TRUE) .otherwise(() -> FALSE); #+END_SRC ** if-or-not-then-else #+BEGIN_SRC java String result; if (isTrue() || !isFalse()) { result = TRUE; } else { result = FALSE; } final String result = Value.where(isTrue()) .orNot(() -> isFalse()) .then(() -> TRUE) .otherwise(() -> FALSE); #+END_SRC ** if-then #+BEGIN_SRC java Optional result; if (isTrue()) { result = Optional.of(TRUE); } else { result = Optional.empty(); } final Optional result = Value.where(isTrue()) .then(() -> TRUE) .optional(); #+END_SRC