diff --git a/src/test/java/option/OptionalExample.java b/src/test/java/option/OptionalExample.java index db18993..ec02922 100644 --- a/src/test/java/option/OptionalExample.java +++ b/src/test/java/option/OptionalExample.java @@ -5,6 +5,7 @@ import java.util.Optional; import java.util.concurrent.ThreadLocalRandom; import java.util.function.Function; +import java.util.function.Predicate; import static org.junit.Assert.assertEquals; @@ -50,9 +51,66 @@ public void map() { assertEquals(expected, actual); } + @Test + public void flatMap() { + final Optional optional = getOptional(); + + final Function> getLength = s -> Optional.of(s.length()); + + final Optional expected = optional.flatMap(getLength); + + final Optional actual; + + if (optional.isPresent()) { + actual = getLength.apply(optional.get()); + } else { + actual = Optional.empty(); + } + + assertEquals(expected, actual); + } + + @Test + public void filter() { + final Optional optional = getOptional(); + + final Predicate predicate = String::isEmpty; + + final Optional expected = optional.filter(predicate); + + final Optional actual; + + if (optional.isPresent() && predicate.test(optional.get())) { + actual = optional; + } else { + actual = Optional.empty(); + } + + assertEquals(expected, actual); + } + + @Test + public void orElse() { + final Optional optional = getOptional(); + + final String param = "defg"; + + final String expected = optional.orElse(param); + + final String actual; + + if (optional.isPresent()) { + actual = optional.get(); + } else { + actual = param; + } + + assertEquals(expected, actual); + } + private Optional getOptional() { return ThreadLocalRandom.current().nextBoolean() - ? Optional.empty() - : Optional.of("abc"); + ? Optional.empty() + : Optional.of("abc"); } }