Functional-style if-then-else
Paul Campbell
1fa6a3c05a
* [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 |
||
---|---|---|
src | ||
.gitignore | ||
CHANGELOG.org | ||
Jenkinsfile.groovy | ||
LICENSE.txt | ||
lombok.config | ||
pom.xml | ||
README.org |
Conditional
Functional Condition and Value.
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();