From 539c9c2469d183acbba66c5e9b7c99697c691eea Mon Sep 17 00:00:00 2001 From: Iuliia_Komarova Date: Wed, 12 Jul 2017 15:42:42 +0300 Subject: [PATCH] homework_optional --- src/test/java/option/OptionalExample.java | 81 +++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/src/test/java/option/OptionalExample.java b/src/test/java/option/OptionalExample.java index db18993..2641854 100644 --- a/src/test/java/option/OptionalExample.java +++ b/src/test/java/option/OptionalExample.java @@ -4,7 +4,9 @@ import java.util.Optional; import java.util.concurrent.ThreadLocalRandom; +import java.util.function.BiFunction; import java.util.function.Function; +import java.util.function.Predicate; import static org.junit.Assert.assertEquals; @@ -55,4 +57,83 @@ private Optional getOptional() { ? Optional.empty() : Optional.of("abc"); } + + @Test + public void filter() { + final Optional o1 = getOptional(); + final Predicate checkLengthPredicate = s -> s.length() > 2; + final Optional expected = o1.filter(checkLengthPredicate); + final Optional actual; + if (o1.isPresent() && checkLengthPredicate.test(o1.get())) { + actual = o1; + } else { + actual = Optional.empty(); + } + + assertEquals(expected, actual); + } + + @Test + public void flatMap() { + final Optional o1 = getOptional(); + final Function> getLength = s -> Optional.of(s.length()); + final Optional expected = o1.flatMap(getLength); + final Optional actual; + if (o1.isPresent()) { + actual = getLength.apply(o1.get()); + } else { + actual = Optional.empty(); + } + + assertEquals(expected, actual); + } + + @Test + public void orElse() { + String defaultString = "default"; + final Optional o1 = getOptional(); + final String expected = o1.orElse(defaultString); + final String actual; + if (o1.isPresent()) { + actual = o1.get(); + } else { + actual = defaultString; + } + + assertEquals(expected, actual); + } + +/* +Homework: +zipMap(joins two elements via some Function) +public static Optional zipMap(Optional o1, Optional o2, BiFunction f) { + (use map and flatmap, don;t use isPresent() and get()) + }*/ + + private static Optional zipMap(Optional o1, Optional o2, BiFunction f) { + return o1.flatMap(t1 -> + o2.map(t2 -> + f.apply(t1, t2))); + } + + @Test + public void zipMap() { + final Optional o1 = getOptional(); + final Optional o2 = getOptional(); + + BiFunction lengthSum = (s1, s2) -> s1.length() + s2.length(); + + Optional expected = zipMap(o1, o2, lengthSum); + Optional actual; + + if (o1.isPresent() && o2.isPresent()) { + actual = Optional.of(lengthSum.apply(o1.get(), o2.get())); + } else { + actual = Optional.empty(); + } + + assertEquals(expected, actual); + } } + +