From b09a52e8694c7f3cfb0909d47df71384f5b55548 Mon Sep 17 00:00:00 2001 From: Narek Karapetyan Date: Fri, 7 Jul 2017 20:09:36 +0300 Subject: [PATCH 1/2] Part 4 initial --- src/test/java/option/OptionalExample.java | 81 +++++++++++++++++++++-- 1 file changed, 74 insertions(+), 7 deletions(-) diff --git a/src/test/java/option/OptionalExample.java b/src/test/java/option/OptionalExample.java index db18993..fc50641 100644 --- a/src/test/java/option/OptionalExample.java +++ b/src/test/java/option/OptionalExample.java @@ -2,22 +2,40 @@ import org.junit.Test; +import java.util.NoSuchElementException; import java.util.Optional; import java.util.concurrent.ThreadLocalRandom; +import java.util.function.BiFunction; import java.util.function.Function; import static org.junit.Assert.assertEquals; public class OptionalExample { + public static Optional zipMap(Optional o1, Optional o2, BiFunction f){ + // isPresent, get none + //use map + flatMap + Optional oo1 = o1.flatMap(Optional::ofNullable); + Optional oo2 = o2.flatMap(Optional::ofNullable); + +// f.apply(oo1, oo2); + return null; + } + @Test public void get() { final Optional o1 = Optional.empty(); - o1.ifPresent(s -> System.out.println(s)); + o1.ifPresent(s -> assertEquals("abc", s)); + + assertEquals("t", o1.orElse("t")); + assertEquals("t", o1.orElseGet(() -> "t")); + } + + @Test(expected = UnsupportedOperationException.class) + public void get2() { + final Optional o1 = Optional.empty(); - o1.orElse("t"); - o1.orElseGet(() -> "t"); o1.orElseThrow(() -> new UnsupportedOperationException()); } @@ -25,10 +43,10 @@ public void get() { public void ifPresent() { final Optional o1 = getOptional(); - o1.ifPresent(System.out::println); + o1.ifPresent(s -> assertEquals("abc", s)); if (o1.isPresent()) { - System.out.println(o1.get()); + assertEquals("abc", o1.get()); } } @@ -50,9 +68,58 @@ public void map() { assertEquals(expected, actual); } + @Test + public void flatMap() { + final Optional o1 = getOptional(); + + final Optional expected = o1.flatMap(s -> Optional.of(s.length())); + + final Optional actual; + if (o1.isPresent()) { + actual = Optional.of(o1.get().length()); + } else { + actual = Optional.empty(); + } + + assertEquals(expected, actual); + } + + @Test + public void filter() { + final Optional o1 = getOptional(); + + o1.filter(s -> s.length() >= 3) + .ifPresent(s -> assertEquals("abc", s)); + + final Optional actual; + if (o1.isPresent()) { + actual = Optional.of(o1.get()).filter(s -> s.length() >= 3); + assertEquals("abc", actual.get()); + } else { + actual = Optional.empty(); + } + } + + @Test(expected = NoSuchElementException.class) + public void filter2() { + final Optional o1 = getOptional(); + + o1.filter(s -> s.length() >= 4) + .ifPresent(System.out::println); + + final Optional actual; + if (o1.isPresent()) { + actual = Optional.of(o1.get()).filter(s -> s.length() >= 4); + assertEquals("abc", actual.get()); + } else { + actual = Optional.empty(); + actual.get(); + } + } + private Optional getOptional() { return ThreadLocalRandom.current().nextBoolean() - ? Optional.empty() - : Optional.of("abc"); + ? Optional.empty() + : Optional.of("abc"); } } From 7f94417c8ef13c067de05045fcb05fe707752299 Mon Sep 17 00:00:00 2001 From: Narek Karapetian Date: Fri, 7 Jul 2017 21:07:04 +0300 Subject: [PATCH 2/2] Optioanl Part 1 (by Narek Karapetian) --- src/test/java/option/OptionalExample.java | 53 ++++++++++++++--------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/src/test/java/option/OptionalExample.java b/src/test/java/option/OptionalExample.java index fc50641..63de14d 100644 --- a/src/test/java/option/OptionalExample.java +++ b/src/test/java/option/OptionalExample.java @@ -2,8 +2,7 @@ import org.junit.Test; -import java.util.NoSuchElementException; -import java.util.Optional; +import java.util.*; import java.util.concurrent.ThreadLocalRandom; import java.util.function.BiFunction; import java.util.function.Function; @@ -12,14 +11,37 @@ public class OptionalExample { - public static Optional zipMap(Optional o1, Optional o2, BiFunction f){ - // isPresent, get none - //use map + flatMap - Optional oo1 = o1.flatMap(Optional::ofNullable); - Optional oo2 = o2.flatMap(Optional::ofNullable); + public static Optional zipMap(Optional o1, Optional o2, BiFunction f) { + return o1.flatMap(t1 -> o2.map(t2 -> f.apply(t1, t2))); + } + + @Test + public void zipMapWithoutNullValues() { + + final Optional s1 = Optional.of("1"); + final Optional s2 = Optional.of("2"); + + final Optional> expected = + Optional.of(Collections.singletonMap(s1.get(), s2.get())); + + final Optional> actual = + zipMap(s1, s2, Collections::singletonMap); + + assertEquals(expected, actual); + } + + @Test + public void zipMapWithNullValues() { + + final Optional s1 = Optional.ofNullable(null); + final Optional s2 = Optional.of("2"); -// f.apply(oo1, oo2); - return null; + final Optional expected = Optional.empty(); + + final Optional> actual = + zipMap(s1, s2, Collections::singletonMap); + + assertEquals(expected, actual); } @Test @@ -95,8 +117,6 @@ public void filter() { if (o1.isPresent()) { actual = Optional.of(o1.get()).filter(s -> s.length() >= 3); assertEquals("abc", actual.get()); - } else { - actual = Optional.empty(); } } @@ -105,16 +125,7 @@ public void filter2() { final Optional o1 = getOptional(); o1.filter(s -> s.length() >= 4) - .ifPresent(System.out::println); - - final Optional actual; - if (o1.isPresent()) { - actual = Optional.of(o1.get()).filter(s -> s.length() >= 4); - assertEquals("abc", actual.get()); - } else { - actual = Optional.empty(); - actual.get(); - } + .get(); } private Optional getOptional() {