* 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]] [[https://sonarcloud.io/dashboard?id=net.kemitix%3Aconditional][file:https://img.shields.io/sonar/https/sonarcloud.io/net.kemitix%3Aconditional/coverage.svg?style=for-the-badge#.svg]] [[https://sonarcloud.io/dashboard?id=net.kemitix%3Aconditional][file:https://img.shields.io/sonar/https/sonarcloud.io/net.kemitix%3Aconditional/tech_debt.svg?style=for-the-badge#.svg]] [[https://sonarcloud.io/dashboard?id=net.kemitix%3Aconditional][file:https://sonarcloud.io/api/project_badges/measure?project=net.kemitix%3Aconditional&metric=sqale_rating#.svg]] [[https://sonarcloud.io/dashboard?id=net.kemitix%3Aconditional][file:https://sonarcloud.io/api/project_badges/measure?project=net.kemitix%3Aconditional&metric=alert_status#.svg]] [[https://sonarcloud.io/dashboard?id=net.kemitix%3Aconditional][file:https://sonarcloud.io/api/project_badges/measure?project=net.kemitix%3Aconditional&metric=reliability_rating#.svg]] [[https://sonarcloud.io/dashboard?id=net.kemitix%3Aconditional][file:https://sonarcloud.io/api/project_badges/measure?project=net.kemitix%3Aconditional&metric=security_rating#.svg]] [[https://sonarcloud.io/dashboard?id=net.kemitix%3Aconditional][file:https://sonarcloud.io/api/project_badges/measure?project=net.kemitix%3Aconditional&metric=sqale_index#.svg]] [[https://sonarcloud.io/dashboard?id=net.kemitix%3Aconditional][file:https://sonarcloud.io/api/project_badges/measure?project=net.kemitix%3Aconditional&metric=vulnerabilities#.svg]] [[https://sonarcloud.io/dashboard?id=net.kemitix%3Aconditional][file:https://sonarcloud.io/api/project_badges/measure?project=net.kemitix%3Aconditional&metric=bugs#.svg]] [[https://sonarcloud.io/dashboard?id=net.kemitix%3Aconditional][file:https://sonarcloud.io/api/project_badges/measure?project=net.kemitix%3Aconditional&metric=code_smells#.svg]] [[https://sonarcloud.io/dashboard?id=net.kemitix%3Aconditional][file:https://sonarcloud.io/api/project_badges/measure?project=net.kemitix%3Aconditional&metric=ncloc#.svg]] [[https://app.codacy.com/project/kemitix/conditional/dashboard][file:https://img.shields.io/codacy/grade/1188742d676e457da91415d2b3a5faf1.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 Optional result = Value.where(isTrue(), () -> TRUE); final String result = Value.where(isTrue()) .then(() -> TRUE) .otherwise(() -> FALSE); #+END_SRC *** if-not-then-else #+BEGIN_SRC java String result; if (!isTrue()) { result = TRUE; } else { result = FALSE; } final String result = Value.whereNot(isTrue()) .then(() -> TRUE) .otherwise(() -> FALSE); #+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-and-not-then-else #+BEGIN_SRC java String result; if (isTrue() && !alternativeIsFalse()) { result = TRUE; } else { result = FALSE; } final String result = Value.where(isTrue()) .andNot(() -> alternativeIsFalse()) .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