From d8e8a0d27464aebc8303d6426e5c1fa6db67fb50 Mon Sep 17 00:00:00 2001 From: bvvvd Date: Sun, 25 Jun 2017 01:09:44 +0300 Subject: [PATCH] OptionalExample done --- src/test/java/option/OptionalExample.java | 126 +++++++++++++++++++++- 1 file changed, 123 insertions(+), 3 deletions(-) diff --git a/src/test/java/option/OptionalExample.java b/src/test/java/option/OptionalExample.java index db18993..88209a0 100644 --- a/src/test/java/option/OptionalExample.java +++ b/src/test/java/option/OptionalExample.java @@ -4,7 +4,10 @@ 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 java.util.function.Supplier; import static org.junit.Assert.assertEquals; @@ -52,7 +55,124 @@ public void map() { private Optional getOptional() { return ThreadLocalRandom.current().nextBoolean() - ? Optional.empty() - : Optional.of("abc"); + ? Optional.empty() + : Optional.of("abc"); } -} + + public static Optional zipMap(Option o1, Option o2, BiFunction function) { + //dont use isPresent, get, mutable variables// nonstatic - use static + //use map, flatMap + throw new UnsupportedOperationException(); + } + + @Test + public void orElse() { + final Optional optional = getOptional(); + + final String string = "someString"; + + final String expected = optional.orElse(string); + + final String actual; + + if (optional.isPresent()) { + actual = optional.get(); + } else { + actual = string; + } + + assertEquals(expected, actual); + } + + @Test + public void orElseGet() { + final Optional optional = getOptional(); + + final Supplier supplier = () -> "someString"; + + final String expected = optional.orElseGet(supplier); + + final String actual; + + if (optional.isPresent()) { + actual = optional.get(); + } else { + actual = supplier.get(); + } + + assertEquals(expected, actual); + } + + @Test + public void orElseThrow() { + final Optional optional = getOptional(); + + final Supplier supplier = NullPointerException::new; + + String expected = null; + + Throwable exception = new Throwable(); + + try { + expected = optional.orElseThrow(supplier); + } catch (NullPointerException e) { + exception = e; + } + + String actual = null; + + try { + if (optional.isPresent()) { + actual = optional.get(); + } else { + supplier.get(); + } + } catch (NullPointerException e) { + assertEquals(exception.getClass(), e.getClass()); + } + + assertEquals(expected, actual); + } + + @Test + public void filter() { + final Optional optional = getOptional(); + + final Predicate predicate = s -> s.equals("someString"); + + Optional expected = optional.filter(predicate); + + Optional actual; + + if (optional.isPresent()) { + if (predicate.test(optional.get())) { + actual = optional; + } else { + actual = Optional.empty(); + } + } else { + actual = Optional.empty(); + } + + assertEquals(expected, actual); + } + + @Test + public void flatMap() { + final Optional optional = getOptional(); + + final Function> function = s -> Optional.of("someString"); + + Optional expected = optional.flatMap(function); + + Optional actual; + + if (optional.isPresent()) { + actual = function.apply(optional.get()); + } else { + actual = Optional.empty(); + } + + assertEquals(expected, expected); + } +} \ No newline at end of file