From e645b127d64d2565ef2b97b2dcab6c9c8b302fea Mon Sep 17 00:00:00 2001 From: Vasilii Bobkov Date: Tue, 25 Jul 2017 12:27:02 +0300 Subject: [PATCH 1/3] part1 first test has been done --- .../exercise/CompletableFutureBasics.java | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/test/java/part1/exercise/CompletableFutureBasics.java b/src/test/java/part1/exercise/CompletableFutureBasics.java index cfd0861..90278a1 100755 --- a/src/test/java/part1/exercise/CompletableFutureBasics.java +++ b/src/test/java/part1/exercise/CompletableFutureBasics.java @@ -60,21 +60,19 @@ public static void after() { public void createNonEmpty() throws ExecutionException, InterruptedException { final Person person = new Person("John", "Galt", 33); - // TODO Create non empty Optional - final Optional optPerson = null; + final Optional optPerson = Optional.of(person); assertTrue(optPerson.isPresent()); assertEquals(person, optPerson.get()); - // TODO Create stream with a single element - final Stream streamPerson = null; + final Stream streamPerson = Stream.of(person); final List persons = streamPerson.collect(toList()); assertThat(persons.size(), is(1)); assertEquals(person, persons.get(0)); - // TODO Create completed CompletableFuture - final CompletableFuture futurePerson = null; + final CompletableFuture futurePerson = new CompletableFuture<>(); + futurePerson.complete(person); assertTrue(futurePerson.isDone()); assertEquals(person, futurePerson.get()); @@ -82,20 +80,18 @@ public void createNonEmpty() throws ExecutionException, InterruptedException { @Test public void createEmpty() throws ExecutionException, InterruptedException { - // TODO Create empty Optional - final Optional optPerson = null; + final Optional optPerson = Optional.empty(); assertFalse(optPerson.isPresent()); - // TODO Create empty stream - final Stream streamPerson = null; + final Stream streamPerson = Stream.empty(); final List persons = streamPerson.collect(toList()); assertThat(persons.size(), is(0)); // TODO Complete CompletableFuture with NoSuchElementException - final CompletableFuture futurePerson = null; - // futurePerson.??? + final CompletableFuture futurePerson = new CompletableFuture<>(); + futurePerson.complete(null); assertTrue(futurePerson.isCompletedExceptionally()); assertTrue(futurePerson From c7056d1c4786d23b8bf63e37b764747ada4a4b8d Mon Sep 17 00:00:00 2001 From: Vasilii Bobkov Date: Tue, 25 Jul 2017 17:10:17 +0300 Subject: [PATCH 2/3] part1 completed --- .../exercise/CompletableFutureBasics.java | 63 +++++++------------ 1 file changed, 24 insertions(+), 39 deletions(-) diff --git a/src/test/java/part1/exercise/CompletableFutureBasics.java b/src/test/java/part1/exercise/CompletableFutureBasics.java index 90278a1..0f7d649 100755 --- a/src/test/java/part1/exercise/CompletableFutureBasics.java +++ b/src/test/java/part1/exercise/CompletableFutureBasics.java @@ -89,10 +89,8 @@ public void createEmpty() throws ExecutionException, InterruptedException { final List persons = streamPerson.collect(toList()); assertThat(persons.size(), is(0)); - // TODO Complete CompletableFuture with NoSuchElementException final CompletableFuture futurePerson = new CompletableFuture<>(); - futurePerson.complete(null); - + futurePerson.completeExceptionally(new NoSuchElementException()); assertTrue(futurePerson.isCompletedExceptionally()); assertTrue(futurePerson .thenApply(x -> false) @@ -103,28 +101,26 @@ public void createEmpty() throws ExecutionException, InterruptedException { public void forEach() throws ExecutionException, InterruptedException { final Person person = new Person("John", "Galt", 33); - // TODO Create non empty Optional - final Optional optPerson = null; + final Optional optPerson = Optional.of(person); final CompletableFuture result1 = new CompletableFuture<>(); - // TODO using optPerson.ifPresent complete result1 + optPerson.ifPresent(result1::complete); assertEquals(person, result1.get()); - // TODO Create stream with a single element - final Stream streamPerson = null; + final Stream streamPerson = Stream.of(person); final CompletableFuture result2 = new CompletableFuture<>(); - // TODO Using streamPerson.forEach complete result2 + streamPerson.forEach(result2::complete); assertEquals(person, result2.get()); - // TODO Create completed CompletableFuture - final CompletableFuture futurePerson = null; + final CompletableFuture futurePerson = new CompletableFuture<>(); + futurePerson.complete(person); final CompletableFuture result3 = new CompletableFuture<>(); - // TODO Using futurePerson.thenAccept complete result3 + futurePerson.thenAccept(result3::complete); assertEquals(person, result3.get()); } @@ -132,27 +128,22 @@ public void forEach() throws ExecutionException, InterruptedException { public void map() throws ExecutionException, InterruptedException { final Person person = new Person("John", "Galt", 33); - // TODO Create non empty Optional - final Optional optPerson = null; + final Optional optPerson = Optional.of(person); - // TODO get Optional from optPerson - final Optional optFirstName = null; + final Optional optFirstName = optPerson.map(Person::getFirstName); assertEquals(person.getFirstName(), optFirstName.get()); - // TODO Create stream with a single element - final Stream streamPerson = null; + final Stream streamPerson = Stream.of(person); - // TODO Get Stream from streamPerson - final Stream streamFirstName = null; + final Stream streamFirstName = streamPerson.map(Person::getFirstName); assertEquals(person.getFirstName(), streamFirstName.collect(toList()).get(0)); - // TODO Create completed CompletableFuture - final CompletableFuture futurePerson = null; + final CompletableFuture futurePerson = new CompletableFuture<>(); + futurePerson.complete(person); - // TODO Get CompletableFuture from futurePerson - final CompletableFuture futureFirstName = null; + final CompletableFuture futureFirstName = futurePerson.thenApply(Person::getFirstName); assertEquals(person.getFirstName(), futureFirstName.get()); } @@ -161,31 +152,25 @@ public void map() throws ExecutionException, InterruptedException { public void flatMap() throws ExecutionException, InterruptedException { final Person person = employeeDb.get(keys.get(0)).thenApply(Employee::getPerson).get(); - // TODO Create non empty Optional - final Optional optPerson = null; + final Optional optPerson = Optional.of(person); + - // TODO Using flatMap and .getFirstName().codePoints().mapToObj(p -> p).findFirst() - // TODO get the first letter of first name if any - final Optional optFirstCodePointOfFirstName = - null; + final Optional optFirstCodePointOfFirstName = optPerson.flatMap(s->s.getFirstName().codePoints().boxed().findFirst()); assertEquals(Integer.valueOf(65), optFirstCodePointOfFirstName.get()); - // TODO Create stream with a single element - final Stream streamPerson = null; + final Stream streamPerson = Stream.of(person); - // TODO Using flatMapToInt and .getFirstName().codePoints() get codepoints stream from streamPerson - final IntStream codePoints = null; + final IntStream codePoints = person.getFirstName().codePoints(); final int[] codePointsArray = codePoints.toArray(); assertEquals(person.getFirstName(), new String(codePointsArray, 0, codePointsArray.length)); - // TODO Create completed CompletableFuture - final CompletableFuture futurePerson = null; + final CompletableFuture futurePerson = new CompletableFuture<>(); + futurePerson.complete(person); - // TODO Get CompletableFuture from futurePerson using getKeyByPerson and employeeDb - final CompletableFuture futureEmployee = null; + final CompletableFuture futureEmployee = futurePerson.thenCompose(s->employeeDb.get(getKeyByPerson(s))); assertEquals(person, futureEmployee.thenApply(Employee::getPerson).get()); } -} +} \ No newline at end of file From 58ba9f5c33c5e45904b676e423ab4c17ccc29f13 Mon Sep 17 00:00:00 2001 From: Vasilii Bobkov Date: Wed, 26 Jul 2017 15:10:28 +0300 Subject: [PATCH 3/3] part1 changed way of creation new CompletableFuture instances --- .../part1/exercise/CompletableFutureBasics.java | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/test/java/part1/exercise/CompletableFutureBasics.java b/src/test/java/part1/exercise/CompletableFutureBasics.java index 0f7d649..12b6ae3 100755 --- a/src/test/java/part1/exercise/CompletableFutureBasics.java +++ b/src/test/java/part1/exercise/CompletableFutureBasics.java @@ -71,9 +71,7 @@ public void createNonEmpty() throws ExecutionException, InterruptedException { assertThat(persons.size(), is(1)); assertEquals(person, persons.get(0)); - final CompletableFuture futurePerson = new CompletableFuture<>(); - futurePerson.complete(person); - + final CompletableFuture futurePerson = CompletableFuture.completedFuture(person); assertTrue(futurePerson.isDone()); assertEquals(person, futurePerson.get()); } @@ -115,8 +113,7 @@ public void forEach() throws ExecutionException, InterruptedException { streamPerson.forEach(result2::complete); assertEquals(person, result2.get()); - final CompletableFuture futurePerson = new CompletableFuture<>(); - futurePerson.complete(person); + final CompletableFuture futurePerson = CompletableFuture.completedFuture(person); final CompletableFuture result3 = new CompletableFuture<>(); @@ -140,8 +137,7 @@ public void map() throws ExecutionException, InterruptedException { assertEquals(person.getFirstName(), streamFirstName.collect(toList()).get(0)); - final CompletableFuture futurePerson = new CompletableFuture<>(); - futurePerson.complete(person); + final CompletableFuture futurePerson = CompletableFuture.completedFuture(person); final CompletableFuture futureFirstName = futurePerson.thenApply(Person::getFirstName); @@ -166,8 +162,7 @@ public void flatMap() throws ExecutionException, InterruptedException { final int[] codePointsArray = codePoints.toArray(); assertEquals(person.getFirstName(), new String(codePointsArray, 0, codePointsArray.length)); - final CompletableFuture futurePerson = new CompletableFuture<>(); - futurePerson.complete(person); + final CompletableFuture futurePerson = CompletableFuture.completedFuture(person); final CompletableFuture futureEmployee = futurePerson.thenCompose(s->employeeDb.get(getKeyByPerson(s)));