Functional-style if-then-else
Find a file
2021-06-22 05:17:03 +00:00
.github Update github actions (#67) 2020-07-11 13:31:49 +01:00
src Update github actions (#67) 2020-07-11 13:31:49 +01:00
.gitignore Initial commit 2017-04-21 10:55:11 +01:00
CHANGELOG.org [changelog] updated (#48) 2019-03-03 21:01:56 +00:00
Jenkinsfile.groovy Changelog readme jenkins (#42) 2019-01-05 13:01:30 +00:00
LICENSE.txt Initial commit 2017-04-21 10:55:11 +01:00
lombok.config lombok.config: added to prevent generated annotation 2018-03-04 18:18:00 +00:00
pom.xml build(deps-dev): bump assertj-core from 3.20.1 to 3.20.2 (#90) 2021-06-22 05:17:03 +00:00
README.org Changelog readme jenkins (#42) 2019-01-05 13:01:30 +00:00

Conditional

Maven

<dependency>
    <groupId>net.kemitix</groupId>
    <artifactId>conditional</artifactId>
    <version>RELEASE</version>
</dependency>

The latest version should be shown above with the nexus and maven-central badges or can be found on 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

if (isTrue()) {
    doSomething();
}

Condition.where(isTrue())
         .then(() -> doSomething());

if-then-else

if (isTrue()) {
    doSomething();
} else {
    doSomethingElse();
}

Condition.where(isTrue())
         .then(() -> doSomething())
         .otherwise(() -> doSomethingElse());

isTrue() / isFalse() / not()

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());

flatMap(Function<Boolean, Condition>)

final Condition condition = Condition.where(isTrue())
                                     .flatMap(b -> Condition.where(b));

if-and-then-else

if (isTrue() && isAlsoTrue()) {
    doSomething();
} else {
    doSomethingElse();
}

Condition.where(isTrue())
         .and(() -> isAlsoTrue())
         .then(() -> doSomething())
         .otherwise(() -> doSomethingElse());

if-or-then-else

if (isTrue() || alternativeIsTrue()) {
    doSomething();
} else {
    doSomethingElse();
}

Condition.where(isTrue())
         .or(() -> alternativeIsTrue())
         .then(() -> doSomething())
         .otherwise(() -> doSomethingElse());

if-then-else-if

if (isFalse()) {
    doSomething();
} else if (isTrue()) {
    doSomethingElse();
}

Condition.where(isFalse())
         .then(() -> doSomething())
         .otherwise(() -> isTrue())
         .then(() -> doSomethingElse());

if-then-if-then

if (isTrue()) {
    doSomething();
    if (isAlsoTrue()) {
        doSomethingElse();
    }
}

Condition.where(isTrue())
         .then(() -> doSomething())
         .and(() -> isAlsoTrue())
         .then(() -> doSomethingElse());

Value

Values from an if-then-else in a functional-style.

Functional, and verbose, alternative to the ternary operator (?:).

if-then-else

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<String> result = Value.where(isTrue(), () -> TRUE);

final String result = Value.<String>where(isTrue())
                           .not()
                           .then(() -> FALSE)
                           .otherwise(() -> TRUE);

if-and-then-else

String result;
if (isTrue() && alternativeIsTrue()) {
    result = TRUE;
} else {
    result = FALSE;
}

final String result = Value.<String>where(isTrue())
                           .and(() -> alternativeIsTrue())
                           .then(() -> TRUE)
                           .otherwise(() -> FALSE);

if-or-then-else

String result;
if (isTrue() || alternativeIsTrue()) {
    result = TRUE;
} else {
    result = FALSE;
}

final String result = Value.<String>where(isTrue())
                           .or(() -> alternativeIsTrue())
                           .then(() -> TRUE)
                           .otherwise(() -> FALSE);

if-or-not-then-else

String result;
if (isTrue() || !isFalse()) {
result = TRUE;
} else {
result = FALSE;
}

final String result = Value.<String>where(isTrue())
                           .orNot(() -> isFalse())
                           .then(() -> TRUE)
                           .otherwise(() -> FALSE);

if-then

Optional<String> result;
if (isTrue()) {
    result = Optional.of(TRUE);
} else {
    result = Optional.empty();
}

final Optional<String> result = Value.<String>where(isTrue())
                                     .then(() -> TRUE)
                                     .optional();