diff --git a/src/test/java/option/OptionalExample.java b/src/test/java/option/OptionalExample.java index db18993..50a732c 100644 --- a/src/test/java/option/OptionalExample.java +++ b/src/test/java/option/OptionalExample.java @@ -1,18 +1,26 @@ package option; +import com.google.common.base.Strings; import org.junit.Test; 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; public class OptionalExample { + public static Optional zipMap(Optional o1, Optional o2, BiFunction f) { + throw new UnsupportedOperationException(); + } + @Test public void get() { - final Optional o1 = Optional.empty(); + Optional o1 = Optional.empty(); o1.ifPresent(s -> System.out.println(s)); @@ -23,7 +31,7 @@ public void get() { @Test public void ifPresent() { - final Optional o1 = getOptional(); + Optional o1 = getOptional(); o1.ifPresent(System.out::println); @@ -34,13 +42,13 @@ public void ifPresent() { @Test public void map() { - final Optional o1 = getOptional(); + Optional o1 = getOptional(); - final Function getLength = String::length; + Function getLength = String::length; - final Optional expected = o1.map(getLength); + Optional expected = o1.map(getLength); - final Optional actual; + Optional actual; if (o1.isPresent()) { actual = Optional.of(getLength.apply(o1.get())); } else { @@ -50,9 +58,110 @@ public void map() { assertEquals(expected, actual); } + + @Test + public void filter() { + Optional opt = getOptional(); + + Predicate test = s -> s.equals("fffff"); + + Optional expected = opt.filter(test); + + Optional actual; + if (opt.isPresent()) { + if (test.test(opt.get())) { + actual = opt; + } else { + actual = Optional.empty(); + } + } else { + actual = Optional.empty(); + } + assertEquals(expected, actual); + } + + @Test + public void flatMap() { + + Optional opt = this.getOptional(); + + Function> getLength = s -> Optional.of(s.length()); + + Optional expected = opt.flatMap(getLength); + + Optional actual; + if (opt.isPresent()) { + actual = getLength.apply(opt.get()); + } else { + actual = Optional.empty(); + } + assertEquals(expected, actual); + } + + @Test + public void orElse() { + + Optional opt = this.getOptional(); + + String exp = "fffff"; + + String expected = opt.orElse(exp); + + String actual; + + if (opt.isPresent()) { + actual = opt.get(); + } else { + actual = exp; + } + assertEquals(expected, actual); + } + + @Test + public void orElseGet() { + Optional opt = getOptional(); + + Supplier supplier = () -> "ffff"; + String expected = opt.orElseGet(supplier); + + String actual; + + if (opt.isPresent()) { + actual = opt.get(); + } else { + actual = supplier.get(); + } + + assertEquals(expected, actual); + } + + @Test + public void orElseThrow() { + + Optional opt = this.getOptional(); + Supplier exception = () -> new Exception("message"); + Optional actual; + + try { + Optional expected = Optional.of(opt.orElseThrow(exception)); + if (opt.isPresent()) { + actual = Optional.of(opt.get()); + assertEquals(expected, actual); + } else { + actual = Optional.empty(); + assertEquals(expected, actual); + } + } catch (Exception e) { + System.out.println(e.getMessage()); + assertEquals("message", e.getMessage()); + } + + } + + private Optional getOptional() { return ThreadLocalRandom.current().nextBoolean() - ? Optional.empty() - : Optional.of("abc"); + ? Optional.empty() + : Optional.of("abc"); } }