conditional/README.org
Paul Campbell 1fa6a3c05a
Changelog readme jenkins (#42)
* [changelog] convert to org-mode format

* [readme] remove sonarcloud and codacy badges

* [readme] adjust heading levels

* [jenkins] Remove codacy

* [jenkins] remove sonarcloud

* [jenkins] try build with JDK 12
2019-01-05 13:01:30 +00:00

5.8 KiB

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