From 3bafe2f82a8a2225cb1256583cc8b1e3f4674aec Mon Sep 17 00:00:00 2001 From: Elena_Fedorovskaia Date: Fri, 7 Jul 2017 17:05:14 +0300 Subject: [PATCH 1/3] Added test for filter method --- src/test/java/option/OptionalExample.java | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/test/java/option/OptionalExample.java b/src/test/java/option/OptionalExample.java index db18993..fbc7c75 100644 --- a/src/test/java/option/OptionalExample.java +++ b/src/test/java/option/OptionalExample.java @@ -2,9 +2,12 @@ import org.junit.Test; +import java.util.ArrayList; +import java.util.List; 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; @@ -55,4 +58,30 @@ private Optional getOptional() { ? Optional.empty() : Optional.of("abc"); } + + @Test + public void filter(){ + final Optional o1 = getOptional(); + final Predicate predicate = s -> s.equals("test"); + Optional expected = o1.filter(predicate); + Optional actual; + if(o1.isPresent()){ + if(predicate.test(o1.get())){ + actual = o1; + }else{ + actual = o1.empty(); + } + }else{ + actual = o1.empty(); + } + + assertEquals(expected,actual); + + } + + @Test + public void flatMap(){ + final Optional o1 = getOptional(); + + } } From 09aa9ff72ae194347d3bf40321644014e20ff667 Mon Sep 17 00:00:00 2001 From: Elena_Fedorovskaia Date: Fri, 7 Jul 2017 17:25:15 +0300 Subject: [PATCH 2/3] Added new exercise --- src/test/java/option/OptionalExample.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/java/option/OptionalExample.java b/src/test/java/option/OptionalExample.java index fbc7c75..317c1f0 100644 --- a/src/test/java/option/OptionalExample.java +++ b/src/test/java/option/OptionalExample.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Optional; import java.util.concurrent.ThreadLocalRandom; +import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.Predicate; @@ -83,5 +84,10 @@ public void filter(){ public void flatMap(){ final Optional o1 = getOptional(); + } + //TODO method zip (слияние двух коллекций) - zipmap + //map and flatmap (не использовать isPresent, get) - соединяем два optional + public static Optional zipMap(Optional o1, Optional o2, BiFunction f){ + } } From c9c2cf56bdeea3d94cb66a19d099c7e4c353883c Mon Sep 17 00:00:00 2001 From: Elena Fedorovskaia Date: Sun, 9 Jul 2017 19:10:16 +0300 Subject: [PATCH 3/3] Optional is done --- src/test/java/option/OptionalExample.java | 107 +++++++++++++++++++--- 1 file changed, 95 insertions(+), 12 deletions(-) diff --git a/src/test/java/option/OptionalExample.java b/src/test/java/option/OptionalExample.java index 317c1f0..29efa91 100644 --- a/src/test/java/option/OptionalExample.java +++ b/src/test/java/option/OptionalExample.java @@ -1,14 +1,18 @@ package option; +import org.apache.commons.lang3.ObjectUtils; +import org.junit.Assert; import org.junit.Test; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; 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; @@ -56,38 +60,117 @@ public void map() { private Optional getOptional() { return ThreadLocalRandom.current().nextBoolean() - ? Optional.empty() - : Optional.of("abc"); + ? Optional.empty() + : Optional.of("abc"); } @Test - public void filter(){ + public void filter() { final Optional o1 = getOptional(); final Predicate predicate = s -> s.equals("test"); Optional expected = o1.filter(predicate); Optional actual; - if(o1.isPresent()){ - if(predicate.test(o1.get())){ + if (o1.isPresent()) { + if (predicate.test(o1.get())) { actual = o1; - }else{ + } else { actual = o1.empty(); } - }else{ + } else { actual = o1.empty(); } - assertEquals(expected,actual); + assertEquals(expected, actual); + + } + + @Test + public void flatMap() { + final Optional o1 = getOptional(); + + final Function> function = s -> Optional.of("test"); + Optional expected = o1.flatMap(function); + Optional actual; + if (o1.isPresent()) { + actual = function.apply(o1.get()); + } else { + actual = Optional.empty(); + } + + assertEquals(expected, actual); + + } + + @Test + public void orElse() { + final Optional o1 = getOptional(); + String expected = o1.orElse("other"); + String actual; + if (o1.isPresent()) { + actual = o1.get(); + } else { + actual = "other"; + } + + assertEquals(expected, actual); } @Test - public void flatMap(){ + public void orElseThrow() { final Optional o1 = getOptional(); + final Supplier supplier = NullPointerException::new; + String expected = null; + String actual = null; + Throwable exception = new Throwable(); + + try { + expected = o1.orElseThrow(supplier); + } catch (NullPointerException e) { + exception = e; + } + + try { + if (o1.isPresent()) { + actual = o1.get(); + } else { + supplier.get(); + } + } catch (NullPointerException e) { + assertEquals(exception.getClass(), e.getClass()); + } + + assertEquals(expected, actual); } - //TODO method zip (слияние двух коллекций) - zipmap - //map and flatmap (не использовать isPresent, get) - соединяем два optional - public static Optional zipMap(Optional o1, Optional o2, BiFunction f){ + @Test + public void orElseGet() { + final Optional o1 = getOptional(); + final Supplier supplier = () -> "test"; + final String expected = o1.orElseGet(supplier); + String actual; + + if(o1.isPresent()){ + actual = o1.get(); + }else{ + actual = supplier.get(); + } + + assertEquals(expected,actual); + + } + + + //TODO method zip + public static Optional zipMap(Optional o1, Optional o2, BiFunction f) { + return o1.flatMap(x -> o2.map(y -> f.apply(x,y))); + } + + @Test + public void testZipMap(){ + final BiFunction f = Integer::max; + assertEquals(zipMap(Optional.of(0), Optional.of(1), f), Optional.of(1)); + assertEquals(zipMap(Optional.empty(), Optional.of(1), f), Optional.empty()); } }